在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()
答案 0 :(得分:2)
通常由使用混合导入引起,其中某些导入是通过站点包进行的,而有些则不是。您可以添加:
sys.path.insert(0,"/home/my/myweb/mywebsite")
这可能会有所帮助。
关于问题的一些讨论,请参阅: