Django:Manage.py runserver没有错误,但是mod_wsgi报告无法导入名称连接

时间:2013-05-09 02:07:52

标签: django deployment import wsgi

python manage.py runserver 0.0.0.0:8000测试我的django网站时,没有错误。

但如果我使用apache和mod_wsgi将其部署到生产环境,则会报告错误cannot import name connection

我发现其他一些问题,例如django 1.4 database router - "cannot import name connection"建议将from django.db import connections添加到settings.py中。

但我发现添加此导入可以防止此错误,但它也会禁用数据库路由器。

我认为这可能是由于manage.py runserver和WSGI之间的不同运行环境造成的。 这就是我的wsgi.py看起来像

import os
import sys

sys.path.insert(0,"/home/my/myweb")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mywebsite.settings")

from django.core.wsgi import get_wsgi_application

application = get_wsgi_application()

如何修复此错误?

我的python版本是2.7,django版本是1.4.3

编辑1:

我的操作系统是CentOS 6.4,在这台服务器上:

如果我使用python manage.py runserver 0.0.0.0:8000运行它,则没有错误。

如果删除数据库路由器,它可以在WSGI下工作。

但是数据库路由器和WSGI不能一起工作。

感谢任何建议。

编辑2:

感谢@Graham Dumpleton,我自己想出来了。

这是适合我的wsgy.py。

import sys

sys.path.insert(0, '/home/my/myweb')

from mywebsite import settings

import django.core.management
django.core.management.setup_environ(settings)
utility = django.core.management.ManagementUtility()
command = utility.fetch_command('runserver')

command.validate()

import django.conf
import django.utils

django.utils.translation.activate(django.conf.settings.LANGUAGE_CODE)

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

1 个答案:

答案 0 :(得分:2)

通常由使用混合导入引起,其中某些导入是通过站点包进行的,而有些则不是。您可以添加:

sys.path.insert(0,"/home/my/myweb/mywebsite")

这可能会有所帮助。

关于问题的一些讨论,请参阅: