I am deploying a django project and facing this error.
My project structure like below:
my_project
my_project
urls.py
settings.py
index.wsgi
home
views.py
models.py
.........
requirements.txt
manage.py
And my index.wsgi looks like below:
import os
import sys
import site
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('~/.virtualenvs/my_project/lib/python2.6/site-packages/')
# Add the app's directory to the PYTHONPATH
sys.path.append('/var/www/uni/my_project')
sys.path.append('/var/www/uni/my_project/home')
os.environ['DJANGO_SETTINGS_MODULE'] = 'my_project.settings'
# Activate your virtual env
activate_env=os.path.expanduser("/home/user/.virtualenvs/my_project/bin/activate_this.py")
execfile(activate_env, dict(__file__=activate_env))
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
And in my virtualhost, the configuration is like below :
<Directory /var/www/uni/my_project/templates/static>
Allow from all
</Directory>
WSGIScriptAlias / /var/uni/news/my_project/my_project/index.wsgi
The apache error.log is shown as:
mod_wsgi (pid=27330): Exception occurred processing WSGI script '/var/www/uni/my_project/my_project/index.wsgi'.
[Mon Jun 09 14:23:53 2014] [error] [client ip] Traceback (most recent call last):
[Mon Jun 09 14:23:53 2014] [error] [client ip] File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__
[Mon Jun 09 14:23:53 2014] [error] [client ip] self.load_middleware()
[Mon Jun 09 14:23:53 2014] [error] [client ip] File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 39, in load_middleware
[Mon Jun 09 14:23:53 2014] [error] [client ip] for middleware_path in settings.MIDDLEWARE_CLASSES:
[Mon Jun 09 14:23:53 2014] [error] [client ip] File "/usr/local/lib/python2.6/dist-packages/django/utils/functional.py", line 184, in inner
[Mon Jun 09 14:23:53 2014] [error] [client ip] self._setup()
[Mon Jun 09 14:23:53 2014] [error] [client ip] File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 42, in _setup
[Mon Jun 09 14:23:53 2014] [error] [client ip] self._wrapped = Settings(settings_module)
[Mon Jun 09 14:23:53 2014] [error] [client ip] File "/usr/local/lib/python2.6/dist-packages/django/conf/__init__.py", line 95, in __init__
[Mon Jun 09 14:23:53 2014] [error] [client ip] raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
[Mon Jun 09 14:23:53 2014] [error] [client ip] ImportError: Could not import settings 'my_project.settings' (Is it on sys.path?): No module named my_project.settings
I went through the mod_wsgi and djnago docs. I know the project structure is not maintaining all the best practices. I will change it later but before that I need to go it live.
I tried by changing file permissions and all the changes that mentioned in same questions.
So, I am assuming I am doing something wrong.
Where is the mis configuration in the above files?
Thanks.
I have a checklist in these kind of scenarios:
Execute a script testing the index.wsgi
interface directly with python, correct errors until the output shows that all is ok. (see update)
Check for permissions.
Check for apache configuration.
Update:
Executing python my_project/index.wsgi
directly shows nothing in console, this approach works on fcgi configuration but no in wsgi, you will need a script that create a test server and show posible errors on console, the example script is this:
test_server.py
#!/usr/bin/env python
from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server
from my_project.index import application #importing the project's index.wsgi file
httpd = make_server('', 8000, application)
httpd.serve_forever()
Steps:
Recommendations:
Check for you __init__.py
either in the project folder and the settings folder
Try to use relative paths in the settings and in the .wsgi file (see example)
Verify the uppercase/lowecase in your names (probably changing "MY_PROJECT.settings"
for "my_project.settings"
example:
import os, sys, site
CURRENT_DIRECTORY = os.path.dirname(os.path.realpath(__file__))
WORK_DIRECTORY = os.path.join(CURRENT_DIRECTORY, '..')
#Add the site-packages
site.addsitedir('/home/SERVER_USERNAME/.virtualenvs/histology_env/lib/python2.6/site-packages')
#activate_env=os.path.expanduser("~/.virtualenvs/histology_env/bin/activate_this.py")
#execfile(activate_env, dict(__file__=activate_env))
#adding the project to the python path
sys.path.append(WORK_DIRECTORY)
#adding the parent directory to the python path
sys.path.append(os.path.join(WORK_DIRECTORY, '..'))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With