2010-06-17 85 views
2

我想让我的Django项目在生产服务器上运行。Django apache-wsgi配置问题

我使用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" 

这是指middleware.py在src /文件夹,其中由设置引用。但是我可以从./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

+1

您安装的应用程序的外观如何?尝试添加“/ home/project /”到您的sys路径 – Prashanth 2010-06-17 12:22:16

+0

尝试添加您输入的路径'django-admin.py ...' – deostroll 2010-06-17 12:27:37

+0

我安装的应用程序如下所示:INSTALLED_APPS =('django.contrib.auth' ,...,'profiles','products',...)。你的意思是在wsgi文件的sys.path中添加“/ home/project”?这没有奏效。 – omat 2010-06-17 12:59:32

回答

3

确保所有的目录/文件被他人读取,使Apache用户可以访问它们,除非这是您正在使用不同的用户守护进程模式,用户必须能够读取的情况下他们。另请阅读:

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

它可能没有帮助,但在为此所描述的WSGI脚本文件的内容将保证过程的环境设置更接近什么Django开发服务器执行的情况下,它关系到这些差异。

+0

非常感谢。我不知道为什么以及如何,但你的wsgi脚本解决了我的问题。顺便说一句,由于谷歌的缓存副本,无法访问您的帖子的链接。 – omat 2010-06-18 15:17:42

1

看着我自己的文件,我添加包含项目的目录,我指定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