【问题标题】:Django WGSI pathsDjango WGSI 路径
【发布时间】:2011-05-10 19:17:27
【问题描述】:

我在使用 django 设置 wgsi 时遇到问题。我正在关注这个http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/。然而,对于将 .wsgi 文件放在哪里以及是否需要设置 sys.path,我仍然很困惑。我已经直接在网络根目录内外尝试过,但我无法按预期工作。

# /home/ben/public_html/django_test/testproject/apache/django.wsgi:

import os
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'testproject.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

相关的 apache 配置:

DocumentRoot "/home/ben/public_html/django_test/testproject/"
WSGIScriptAlias / "/home/ben/public_html/django_test/testproject/apache/django.wsgi"

Apache 日志错误(标准 apache 500 页面):

ImportError: Could not import settings 'testproject.settings' (Is it on sys.path? ...

我可以让 django 至少通过使用这个来抛出它自己的错误:

import os
import sys

path = '/home/ben/public_html/django_test/testproject'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

这导致了这个 django 错误页面:

ImportError at /admin/
No module named testproject.urls

【问题讨论】:

    标签: python django apache apache2 wsgi


    【解决方案1】:

    我把 wsgi 和 settings.py 放在同一级别,看起来像这样:

    import os
    import sys
    
    sys.path.insert(0,os.sep.join(os.path.abspath(__file__).split(os.sep)[:-2]))
    
    
    os.environ['DJANGO_SETTINGS_MODULE'] = 'yourprojectname.settings'
    
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()
    

    这是 apache conf 文件:

    NameVirtualHost *:80
    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.yourprojectname.com
        Alias /media/ /home/diegueus9/workspace/yourprojectname/media/
    
        <Directory /home/diegueus9/workspace/yourprojectname/media/>
            Order deny,allow
            Allow from all
        </Directory>
    
        WSGIScriptReloading On
        WSGIDaemonProcess yourprojectname 
        WSGIProcessGroup yourprojectname
        WSGIApplicationGroup yourprojectname
        WSGIPassAuthorization On
    
        WSGIScriptAlias / /home/diegueus9/workspace/yourprojectname/yourfile.wsgi
        ErrorLog /var/log/apache2/yourprojectname-error.log
    
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel debug
    
        CustomLog /var/log/apache2/yourprojectname-access.log combined
    
    </VirtualHost>
    

    【讨论】:

    • 这给出了 apache 500。还尝试设置 os.environ['DJANGO_SETTINGS_MODULE'] = 'testproject.settings' 。但没有运气。
    【解决方案2】:

    作为一个快速修复,您可以在将其添加到 sys.path 旁边:

    path = '/home/ben/public_html/django_test/testproject'
    

    还要加上这个:

    path2 = '/home/ben/public_html/django_test'
    

    您还可以在 Apache VirtualHost 中更改 Python 路径:

    WSGIDaemonProcess [...] python-path=/home/ben/public_html/django_test
    

    但您还应该查看 mod_wsgi 文档并了解 Graham Dumpleton 的建议。

    【讨论】:

      【解决方案3】:

      Here is a nice tutorial 向您展示了如何将 mod_wsgi 与 Django 以及与此问题无关的一些其他项目一起使用。

      【讨论】:

        【解决方案4】:

        我只花了几个小时解决这个问题,我的解决方法是 SELinux 禁止访问我的 /django/ 文件夹。

        要检查SEStatus 是否阻止了您的访问,请查看/var/log/audit/audit.log 的日志

        我的解决方法很简单:

        restorecon -R /var/www/django/
        

        【讨论】:

          猜你喜欢
          • 2018-12-21
          • 2011-03-11
          • 1970-01-01
          • 2021-12-14
          • 2019-06-04
          • 1970-01-01
          • 1970-01-01
          • 2016-06-03
          • 1970-01-01
          相关资源
          最近更新 更多