首页 文章

在WAMP上使用mod_wsgi进行Django部署

提问于
浏览
0

上下文

  • 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 回答

  • 0

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

    添加:

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

    到wsgi.py文件就可以了 .

    感谢Daniel Roseman让我走上正轨 .

  • 1

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

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

相关问题