【发布时间】:2014-06-18 21:54:25
【问题描述】:
我正在尝试通过 apache 和 mod_wsgi 托管我的 python 3.4 烧瓶应用程序。通过烧瓶自己的服务器运行应用程序工作正常。该应用是在虚拟环境 pyvenv-3.4 中制作的。
但是,当尝试在浏览器中连接到 apache 服务器时,它会引发 500 http 错误。附加配置和日志。我认为这与使用 pyvenv 而不是 virtualenv(来自 pip)有关。 Flask 文档告诉我使用这一行来激活虚拟环境
activate_this = '/path/to/env/bin/activate_this.py'
但是,由于文件不存在,这会产生 IOError。我尝试将其指向“激活”文件,然后激活.csh、激活.fish,但没有成功。所有文件都会在 deactivate 行产生 SyntaxError。
如何使用我的 virtualenv 通过 Apache 运行这个应用程序?
flaskapp.wsgi
#!/usr/bin/python
activate_this = '/var/www/FlaskApp/FlaskApp/bin/activate'
execfile(activate_this, dict(__file__=activate_this))
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")
from FlaskApp import app as application
application.secret_key = 'some secret key'
Apache 虚拟主机
<VirtualHost *:80>
ServerName example.org # my server name
ServerAlias gallifrey 192.168.0.84
ServerAdmin admin@example.org # my admin
WSGIScriptAlias /flask /var/www/FlaskApp/flaskapp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/FlaskApp/static
<Directory /var/www/FlaskApp/FlaskApp/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
层次结构
/var/www/FlaskApp
flaskapp.wsgi
FlaskApp/
bin/
activate
activate.csh
activate.fish
easy_install, easy_install-3.4
pip, pip3, pip3.4
python, python3, python3.4
include/
lib/
scripts/
static/
templates/
app.py
__init__.py
尝试打开网页时出现 http 500 错误:
Apache 错误日志
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] mod_wsgi (pid=31629): Target WSGI script '/var/www/FlaskApp/flaskapp.wsgi' cannot be loaded as Python module.
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] mod_wsgi (pid=31629): Exception occurred processing WSGI script '/var/www/FlaskApp/flaskapp.wsgi'.
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] Traceback (most recent call last):
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] File "/var/www/FlaskApp/flaskapp.wsgi", line 3, in <module>
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] execfile(activate_this, dict(__file__=activate_this))
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] File "/var/www/FlaskApp/FlaskApp/bin/activate", line 4
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] deactivate () {
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] ^
[Fri May 02 10:22:58 2014] [error] [client 192.168.0.81] SyntaxError: invalid syntax
【问题讨论】:
-
你为什么要在 Python WSGI 文件中使用 virtualenv
activateshell 脚本?那是行不通的。请参阅code.google.com/p/modwsgi/wiki/VirtualEnvironments。 -
@Sklirg 您能否使用工作配置更新答案。我正在尝试复制此设置,但它不起作用,仍然出现 500 个错误。
标签: python apache flask virtualenv mod-wsgi