在WAMP上使用mod_wsgi进行Django部署

时间:2013-04-08 16:38:20

标签: django windows wamp mod-wsgi

上下文

  • Python 2.7 64bit
  • Django 1.3
  • WAMP 2.2(Apache 2.2.22)64bit
  • mod_wsgi 3.4 64bit
  • 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行,调用

     

self.load_middleware()

     

用于settings.MIDDLEWARE_CLASSES中的middleware_path:

     

文件“C:\ Python27 \ lib \ site-packages \ django \ conf \ _ init _。py”,第52行, getattr

     

self._setup(名称)

     

文件“C:\ Python27 \ lib \ site-packages \ django \ conf \ _ init _。py”,第47行,在_setup

     

self._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 个答案:

答案 0 :(得分:1)

这与中间件无关,只是遇到错误的地方。错误本身就是最后一行:“无法导入设置'myapp.settings'”。这几乎可以肯定是因为你没有修改PYTHONPATH - 无论是在你的wsgi还是你的Apache conf中 - 都把“myapp”放在了路径上。

在Django文档中查看例如the example Apache conf - 那里有一个WSGIPythonPath指令将应用程序添加到Python路径中,这是你没有的。

答案 1 :(得分:0)

在httpd.conf中放置WSGIPythonPath指令会阻止服务器启动,但问题确实与未声明的路径有关。

添加:

sys.path.append("c:/wamp/www/myapp")

到wsgi.py文件就可以了。

感谢丹尼尔罗斯曼让我走上正轨。