【问题标题】:django 1.4 with apache virtualhost - path problems带有 apache virtualhost 的 django 1.4 - 路径问题
【发布时间】:2012-05-31 21:29:26
【问题描述】:

我正在尝试将我的应用程序从 django 1.2 升级到 1.4,我已经使用内置的网络服务器成功测试了它。

但是,我在使用 Apache(在 Ubuntu 上)将其部署为 VirtualHost 时遇到问题。

我的sites-available/default 包含:

<VirtualHost *:80>
    ServerName myapplication

    WSGIScriptAlias / /usr/share/myapplication/wsgi.py
    WSGIDaemonProcess myapplication python-path=/usr/share/myapplication:/usr/lib/python2.6/dist-packages

    <Directory /usr/share/myapplication>
    <Files wsgi.py>
      Order deny,allow
      Allow from all
    </Files>
    </Directory>

</VirtualHost>

文件/usr/share/myapplication/wsgi.py 包含标准:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapplication.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Apache 可以正常启动,但是当我转到 http://myapplication 时,我得到“500:内部服务器错误”并且 apache 日志显示:

ImportError: Could not import settings 'WCReporter.settings' (Is it on sys.path?): No module named WCReporter.settings

我是否正确使用了 WSGIDaemonProcess? django 文档不清楚。

谢谢

【问题讨论】:

    标签: django apache virtualhost


    【解决方案1】:

    通过http://rc98.net/django_wsgi 解决了这个问题。

    网站可用/默认:

    <VirtualHost *:80>
        ServerName myapplication
    
        WSGIDaemonProcess myapplication
        WSGIProcessGroup myapplication
    
        WSGIScriptAlias / /usr/share/myapplication/wsgi.py
        <Directory /usr/share/myapplication>
        <Files wsgi.py>
          Order deny,allow
          Allow from all
        </Files>
        </Directory>
    
    </VirtualHost>
    

    和wsgi.py:

    import os,sys
    
    path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    if path not in sys.path:
        sys.path.append(path)
    
    path = '/usr/share/myapplication'
    if path not in sys.path:
        sys.path.append(path)
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapplication.settings")
    
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    

    【讨论】:

      【解决方案2】:

      您能否在运行时打印您的路径:

      #init.py
      
          import sys
          print sys.path
      
      1. 您在项目基础目录中有一个 init 文件吗?
      2. 如果您导入设置而不是 myapp.settings 是否有效?

      【讨论】:

      • 1.是 myapp/__init.py__ 存在,2. 不,同样的错误。你的意思是我应该将这些行添加到 myapp/__init.py__ 中吗?我在哪里可以找到输出?
      • 路径包括 ['/usr/share/myapplication','/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/ lib/python2.6/lib-tk'、'/usr/lib/python2.6/lib-old'、'/usr/lib/python2.6/lib-dynload'、'/usr/lib/python2.6 /dist-packages'、'/usr/lib/pymodules/python2.6'、'/usr/local/lib/python2.6/dist-packages'、'/usr/share/myapplication/..']跨度>
      • 不,只是它所在的 dist-packages。我应该将它显式添加到 WSGIDaemonProcess 路径吗?
      • 我做了这个,运行./manage.py runserver时,没有出现在路径列表中!所以我的 WSGIDaemonProcess 行显然有问题
      • 这很有帮助,已经添加了完整的答案。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 2015-07-26
      • 2015-05-03
      • 2016-02-16
      • 1970-01-01
      • 2010-11-02
      相关资源
      最近更新 更多