上下文
-
Python 2.7 64位
-
Django 1.3
-
WAMP 2.2(Apache 2.2.22)64位
-
mod_wsgi 3.4 64位
-
Windows 7 64位
细节| Apache httpd.conf
...
Listen 192.168.20.11:8080
...
LoadModule wsgi_module modules/mod_wsgi.so
...
ServerName 192.168.20.11:8080
...
DocumentRoot "c:/wamp/www/"
...
<VirtualHost *:8080>
ServerName 192.168.20.11
ServerAdmin me@mine.com
DocumentRoot "C:/wamp/www/myapp"
<Directory "C:/wamp/www/mapp">
Order allow,deny
Allow from all
</Directory>
Alias /myapp/static "C:/wamp/www/myapp/static"
WSGIScriptAlias /test "C:/wamp/www/myapp/wsgi.py"
</VirtualHost>
细节| wsgi.py
由Django的startproject生成 . 位于默认/myapp/myapp/wsgi.py
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
问题
鉴于上述情况,无法在WAMP上部署Django应用程序 .
一个“Hello World”测试wsgi应用程序工作正常,所以我确认mod_wsgi是活动的 .
我收到错误:
内部服务器错误服务器遇到内部错误或配置错误,无法完成您的请求 . 请联系服务器管理员me@mine.com并告知他们错误发生的时间,以及可能导致错误的任何操作 . 服务器错误日志中可能提供了有关此错误的更多信息 .
当指向:
http://192.168.20.11:8080/myapp
静态文件夹工作正常,我可以通过指向访问目录中的所有静态文件:
http://192.168.20.11:8080/myapp/static
细节|服务器错误日志
注意:我删除了可读性的时间戳 .
mod_wsgi(pid = 5728,process ='',application ='192.168.20.11:8080 | / myapp'):加载WSGI脚本'C:/wamp/www/myapp/myapp/wsgi.py' . mod_wsgi(pid = 5728):处理WSGI脚本'C:/wamp/www/myapp/myapp/wsgi.py'时发生异常 . 回溯(最近调用最后一次):文件“C:\ Python27 \ lib \ site-packages \ django \ core \ handlers \ wsgi.py”,第236行,在settings.mIDDLEWARE_CLASSES:file中调用self.load_middleware()for middleware_path “C:\ Python27 \ lib \ site-packages \ django \ conf \ init.py”,第52行,在getattr self._setup(name)文件“C:\ Python27 \ lib \ site-packages \ django \ conf \ init .py“,第47行,在_setup中自我._wrapped =设置(settings_module)文件”C:\ Python27 \ lib \ site-packages \ django \ conf \ init.py“,第132行,在init中引发ImportError(”不能导入设置'%s'(是否在sys.path?):%s“%(self.SETTINGS_MODULE,e))ImportError:无法导入设置'myapp.settings'(是否在sys.path上?):否名为myapp.settings的模块文件不存在:C:/wamp/www/myapp/favicon.ico
在这种情况下,我不了解中间件的功能,并且认为没有必要使用中间件 .
关于系统路径,当我添加:
WSGIPythonPath "c:/wamp/www/myapp"
在httpd.conf文件中的VirtualHost中,服务器拒绝启动 .
目标
使用Django应用程序(已使用Django开发服务器在本地开发和测试)部署到Microsoft SBS网络而不使用IIS . 我尝试在IIS上部署并在早期遇到困难,因此切换到WAMP .
我是Python和Django的新手,并且从未在任何 生产环境 服务器上部署过Web应用程序(我是一名通常使用数学和统计编程的R程序员) .
任何有助于实现这一目标的建议,无论采用何种方法,都将非常感谢!
2 回答
在httpd.conf中放置WSGIPythonPath指令会阻止服务器启动,但问题确实与未声明的路径有关 .
添加:
到wsgi.py文件就可以了 .
感谢Daniel Roseman让我走上正轨 .
这与中间件无关,只是遇到错误的地方 . 错误本身就是最后一行:“无法导入设置'myapp.settings'” . 这几乎可以肯定是因为你没有修改PYTHONPATH - 无论是在你的wsgi还是你的Apache conf中 - 都把“myapp”放在了路径上 .
在Django文档中查看例如the example Apache conf - 那里有一个
WSGIPythonPath
指令将应用程序添加到Python路径中,这是您没有的 .