0

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

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

我发现了一些其他问题,例如django 1.4 数据库路由器 - “无法导入名称连接”建议添加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()
4

1 回答 1

2

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

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

这可能会有所帮助。

有关该问题的一些讨论,请参见:

于 2013-05-09T03:57:05.530 回答