【问题标题】:Django apache-wsgi configuration problemDjango apache-wsgi 配置问题
【发布时间】:2011-03-04 22:34:28
【问题描述】:

我正在尝试让我的 Django 项目在生产服务器上运行。

我使用 pip 设置环境,因此它与一切运行良好的开发环境相同。唯一的区别是我不在生产环境中使用 virtualenv,因为这个项目是唯一将在生产环境中运行的项目。同样在生产中,有一个 Nginx 反向代理来提供静态内容,并将动态请求传递给 Apache2。

Apache wsgi 文件如下:

import sys, os

sys.path.append('/home/project/src')

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

访问服务器时出现导入错误:

ImproperlyConfigured: Error importing middleware middleware: "cannot import name UserProfile"

指的是设置所引用的src/文件夹下的middleware.py。但我可以从 ./manage.py shell 提示符中同时导入中间件和 UserProfile 类。

wsgi 文件中的路径似乎有问题,但我看不到是什么。目录结构为:

/home/project
/home/project/src (which contains the settings.py, middleware.py and app folders)
/home/apache/apache.wsgi

非常感谢任何帮助。

谢谢, oMat

【问题讨论】:

  • 您安装的应用程序看起来如何?尝试将“/home/project/”添加到您的系统路径
  • 尝试添加您输入django-admin.py ...的路径
  • 我安装的应用程序是这样的:INSTALLED_APPS = ('django.contrib.auth', ..., 'profiles', 'products', ...)。您的意思是将“/home/project”添加到 wsgi 文件中的 sys.path 吗?这不起作用。
  • 导入中间件看起来不是问题,更像是循环导入问题。
  • 但是我将无法在开发机器上运行它,或者无法从生产机器上的./manage shell 中导入这些模块,对吧?

标签: django apache wsgi pip


【解决方案1】:

确保其他人可以读取所有目录/文件,以便 Apache 用户可以访问它们,除非您正在使用不同的用户运行守护程序模式,以防用户必须能够读取它们。另请阅读:

http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

这可能没有帮助,但最后描述的 WSGI 脚本文件内容将确保进程环境设置更接近 Django 开发服务器所做的,以防与这些差异相关。

【讨论】:

  • 非常感谢。我不知道为什么以及如何,但你的 wsgi 脚本解决了我的问题。顺便说一句,由于谷歌的缓存副本,您的帖子的链接无法访问。
【解决方案2】:

查看我自己的文件,我添加了包含项目的目录,并指定了project.settings,而不是settings

试试:

import sys, os

sys.path.append('/home/')
sys.path.append('/home/project/')

os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

如果您制作类似 ~/django-sites 的东西来指定它而不是 /home 会更好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多