Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生产环境上的Django导入错误_Django_Apache_Wsgi_Importerror - Fatal编程技术网

生产环境上的Django导入错误

生产环境上的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

我在使用Apache和mod_wsgi的生产服务器上运行django项目时遇到问题。当我启动apache并第一次转到站点或从其他站点转到站点时发生此错误:

在/
异常值:无法导入名称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/“/var/www/projectname/projectname.wsgi”

当我遇到这个问题时,这篇文章向我指出了答案:我在更高层次的模块中遇到了一个bug

正如Michal在那篇文章中解释的那样:

Python不仅仅从
管理/models.py
文件中选择一个类。相反,Python解释器读取整个文件,创建模块对象,从新模块名称空间中导入的文件执行代码,然后将名称约定从新模块名称空间复制到当前名称空间。因此,尽管看起来您只是从一个模块导入了一个类,但该模块中任何地方的错误都会阻止成功导入—在您的情况下,这是类ContractForm的错误。其余的回溯详细说明了该类到底出了什么问题

因此,进一步回顾你的回溯,你可能会发现你的问题