Django WSGI 路径

5 投票
4 回答
3854 浏览
提问于 2025-04-16 07:09

我在设置Django和wgsi的时候遇到了一些问题。我正在按照这个链接上的步骤进行操作。但是我还是很困惑,不知道.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

4 个回答

1

作为一个快速解决办法,你可以在将这个添加到 sys.path 的同时:

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

还可以添加这个:

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

你也可以在你的 Apache 虚拟主机中更改 Python 的路径:

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

不过,你还应该查看 mod_wsgi 的文档,了解 Graham Dumpleton 在那里给出的建议。

1

这里有一个很不错的教程,教你如何在Django中使用mod_wsgi,还有一些和这个问题无关的其他内容。

8

我把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的配置文件:

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>

撰写回答