生产环境上的Django导入错误
我在使用Apache和mod_wsgi的生产服务器上运行django项目时遇到问题。当我启动apache并第一次转到站点或从其他站点转到站点时发生此错误: 在/生产环境上的Django导入错误,django,apache,wsgi,importerror,Django,Apache,Wsgi,Importerror,我在使用Apache和mod_wsgi的生产服务器上运行django项目时遇到问题。当我启动apache并第一次转到站点或从其他站点转到站点时发生此错误: 在/ 异常值:无法导入名称MyName 异常位置/var/www/projectname/appname/somemodule.py 当我重新加载页面时,错误消失,站点工作正常。另一点是,这个错误是有选择地发生的,有时不会出现 在项目中,我使用不带项目名称前缀的导入(我的意思是“from accounts.models import Acco
异常值:无法导入名称MyName
异常位置/var/www/projectname/appname/somemodule.py 当我重新加载页面时,错误消失,站点工作正常。另一点是,这个错误是有选择地发生的,有时不会出现 在项目中,我使用不带项目名称前缀的导入(我的意思是“from accounts.models import Account”而不是“from projectname.accounts.models import Account”) 在开发中(manage.py runserver)服务器都可以正常工作,没有任何问题 我使用了apache和wsgi脚本配置的许多变体,但问题并没有得到解决 这里是我当前的projectname.wsgi:
#!/usr/bin/env python
import os, sys, re
sys.path.append('/var/www/projectname')
sys.path.append('/var/www')
os.environ['PYTHON_EGG_CACHE'] = '/var/www/projectname/.python-egg'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
以下是apache配置中的一些部分:
<VirtualHost ip:80>
ServerAdmin admin@server.com
DocumentRoot /var/www
ServerName www.projectname.com
WSGIScriptAlias / "/var/www/projectname/projectname.wsgi"
WSGIDaemonProcess projectname threads=5 maximum-requests=5000
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
....
服务器管理员admin@server.com
DocumentRoot/var/www
服务器名www.projectname.com
WSGIScriptAlias/“/var/www/projectname/projectname.wsgi”
WSGIDaemonProcess projectname线程数=5个最大请求数=5000
选项如下符号链接
不允许超限
选项索引跟随符号链接多视图
不允许超限
命令允许,拒绝
通融
....
另外,我正在为SSL使用单独的虚拟主机。我希望有人能帮助我。
谢谢 我添加了一个类似的问题,原因是“当前目录”是“www”,而不是根项目目录。在django开发服务器中,服务器环境是根据您正在工作的当前项目设置的。这就是在切换到Apache时发生导入错误的原因 使用导入时,请使用“从projectname.appname.models导入MyModel”。尽你所能的特别 在您的案例中使用sys.path.append('location/to/your_project_foler/'))/var/www 只是一个建议: 还可以尝试在根以外的其他url中设置django。在尝试在站点根目录上运行django时,我也遇到了类似的问题,即:
WSGIScriptAlias/
管理/models.py
文件中选择一个类。相反,Python解释器读取整个文件,创建模块对象,从新模块名称空间中导入的文件执行代码,然后将名称约定从新模块名称空间复制到当前名称空间。因此,尽管看起来您只是从一个模块导入了一个类,但该模块中任何地方的错误都会阻止成功导入—在您的情况下,这是类ContractForm的错误。其余的回溯详细说明了该类到底出了什么问题
因此,进一步回顾你的回溯,你可能会发现你的问题