2

我正在尝试使用 WSGI 部署在 Apache 上部署 Django(位于 virtualenv 中)。我正在遵循https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/的默认教程

wsgi.py(Django 生成的默认文件,已删除注释):

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

apache2.conf (它与 Debian 中的 httpd.conf 相同)。将此附加到末尾:

WSGIScriptAlias / /home/user/Desktop/expofit/expofit_hg/py/server/server/wsgi.py
WSGIDaemonProcess example.com python-path=/home/user/Desktop/expofit/expofit_hg/py/server:/home/user/Desktop/expofit/expofit_env/lib/python2.7/site-packages
WSGIProcessGroup example.com

<Directory /home/user/Desktop/expofit/expofit_hg/py/server/server>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

Alias /static/ /home/user/Desktop/expofit/expofit_hg/py/server/server/static

<Directory /home/user/Desktop/expofit/expofit_hg/py/server/server/static>
Order deny,allow
Allow from all
</Directory>

但是,这以错误结束:

[Thu Dec 06 17:08:40 2012] [error] [client 192.168.56.1] ImportError: No module named django.core.wsgi

似乎标准的python是可以访问的,因为

import os

不会产生错误。所以似乎从 virtualenv 导入的模块是不可导入的。教程说:

如果您使用守护程序模式,则需要对上述配置进行进一步更改,即您不能使用 WSGIPythonPath;相反,您应该使用 WSGIDaemonProcess 的 python-path 选项,例如:

WSGIDaemonProcess example.com python-path=/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages
WSGIProcessGroup example.com

我错过了什么?

4

3 回答 3

2

问题出在权限上。我没有检查谁是用户,一开始的权限是什么,但是,当我将权限 777 更改为包含 Django 代码文件的所有目录时,它开始工作。

我知道一个人必须尽可能小心使用权限,并且为所有内容提供 777 并不是最好的方法,但应该检查如何以最小的权限更改使其工作。然而,它解决了问题中的问题。

于 2013-03-14T16:56:20.980 回答
1

对于单个应用程序,这是最容易开箱即用的,请参阅http://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Baseline_Environment 这或使用 WSGIPythonPath 都不能仅用于虚拟主机,但必须是全球的。

WSGIPythonHome [path to virtualenv folder]

如果您有多个应用程序 - 使用 sys.path 将您的 virtualenv 的 site-packages 文件夹附加到 wsgi.py 的顶部似乎是最简单的事情,请参阅http://code.google.com/p/modwsgi/wiki/VirtualEnvironments #Application_Environments

于 2012-12-06T21:49:17.287 回答
1

你的环境的pythonpath与我认为的apache不同。
使用 easy_install 或 pip 安装 django “globaly”

或将 .virtualenv pythonpath 添加到 mod_wsgi 配置

WSGIPythonPath 目录|directory-1:directory-2:

MOD_wsgi 配置

于 2012-12-06T21:52:08.630 回答