Django mod_wsgi: an error occurred while processing the wsgi script

I am deploying a django project and am facing this error.

My project structure as 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 this:

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 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 virtual host, the configuration is as follows:

    <Directory /var/www/uni/my_project/templates/static>
        Allow from all
     </Directory>  
  WSGIScriptAlias / /var/uni/news/my_project/my_project/index.wsgi 

Apache error.log is displayed 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 mod_wsgi and djnago docs. I know that the project structure does not support all the best practices. I will change it later, but before that I will need to live live.

I tried to change the file permissions and all the changes mentioned in the same questions.

So, I assume that I am doing something wrong.

Where is the wrong configuration in the above files?

Thank.

+4
3

. , .

  • django wsgi python (wsgi.py), (index.wsgi). , , , .

    import os, sys, site
    
    #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))
    
    sys.path.append('/opt/')
    sys.path.append('/opt/MY_PROJECT')
    sys.path.append('/opt/MY_PROJECT/MY_PROJECT')
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MY_PROJECT.settings")
    
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    
  • DON "T /var/www/html/FOLDER! , , . /opt/.

  • env, . . ( ).

  • NameVirtualHost *:80
    WSGISocketPrefix /var/run/wsgi
    WSGIPythonPath /home/SERVER_USERNAME/.virtualenvs/histology_env/lib/python2.6/site-packages
    <VirtualHost *:80>
    
            WSGIDaemonProcess safe python-path=/opt/virtual_microscope:/home/SERVER_USERNAME/.virtualenvs/histology_env/lib/python2.6/site-packages
            WSGIProcessGroup safe
            WSGIScriptAlias / /opt/MY_PROJECT/MY_PROJECT/wsgi.py
    
            Alias /static/ /var/www/html/home/static/
            Alias /slides/ /var/www/html/pictures/slides/
    
            <Directory /opt/MY_PROJECT/MY_PROJECT/>
                    Order deny,allow
                    Allow from all
            </Directory>
    </VirtualHost>
    
  • , sudo service httpd reload

, , , . , , .

+2

:

  • script index.wsgi python, , , . (. )

  • .

  • apache.

Update:

python my_project/index.wsgi , fcgi, wsgi script, , script -

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 index.wsgi file
httpd = make_server('', 8000, application)
httpd.serve_forever()

:

  • ( )
  • :
  • .

:

  • __init__.py ,

  • .wsgi (. )

  • / (, "MY_PROJECT.settings" "MY_PROJECT.settings"

:

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()
+2

virtualenv Apache, WSGI . Apache, . https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/#using-a-virtualenv , Apache. - , Apache.

reset WSGI

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
0

Source: https://habr.com/ru/post/1543867/


All Articles