Django mod_wsgi:处理wsgi脚本时发生异常

arn*_*old 6 python deployment django mod-wsgi

我正在部署一个 django 项目并面临这个错误。

我的项目结构如下:

my_project
   my_project
      urls.py
      settings.py
      index.wsgi
      home
         views.py
         models.py
         .........

    requirements.txt
    manage.py
Run Code Online (Sandbox Code Playgroud)

我的 index.wsgi 如下所示:

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()
Run Code Online (Sandbox Code Playgroud)

在我的虚拟主机中,配置如下:

    <Directory /var/www/uni/my_project/templates/static>
        Allow from all
     </Directory>  
  WSGIScriptAlias / /var/uni/news/my_project/my_project/index.wsgi 
Run Code Online (Sandbox Code Playgroud)

apache error.log 显示为:

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
Run Code Online (Sandbox Code Playgroud)

我浏览了 mod_wsgi 和 djnago 文档。我知道项目结构并没有保持所有的最佳实践。我稍后会更改它,但在此之前我需要让它上线。

我尝试更改文件权限以及相同问题中提到的所有更改。

所以,我假设我做错了什么。

以上文件中的mis配置在哪里?

谢谢。

xjt*_*ian 0

您应该在 Apache 配置中指定项目的 virtualenv,而不是应用程序 WSGI 文件。由于您使用的是 Apache,请参阅https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/#using-a-virtualenv了解您需要放入 Apache 配置中的内容。我还强烈建议在守护进程模式下运行 - 除非您有充分的理由不这样做,否则您几乎应该始终在 Apache 上使用守护进程模式。

然后将您的项目 WSGI 文件重置为

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

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)