我有一个在 Python 和 Flask 上运行的网站。10 次中有 4 次返回 500 错误,据我所知是随机的。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello world!"
这是我的 .wsgi 文件(我正在使用 virtualenv,并在导入应用程序之前激活它):
activate_this = '/path/to/app/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
from myapp import app as application
这是我的 Apache 主机配置:
<VirtualHost *:80>
ServerName website.com
WSGIDaemonProcess myapp user=ubuntu group=ubuntu processes=2 threads=5
WSGIScriptAlias / /path/to/app/myapp.wsgi
<Directory /path/to/app>
WSGIProcessGroup myapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
欢迎任何调试这个的指针!
编辑:
Apache 错误日志:
mod_wsgi (pid=29581): Target WSGI script '/path/to/app/myapp.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=29581): Exception occurred processing WSGI script '/path/to/app/myapp.wsgi'.
Traceback (most recent call last):
File "/path/to/app/myapp.wsgi", line 4, in <module>
from myapp import app as application
ImportError: No module named myapp
两个进程之一(29581)似乎没有运行 virtualenv 位,因此没有找到要导入的文件。
编辑2:
这是在 PATH 中找不到的本地文件 myapp.py。我需要将它包含在我的 .wsgi 文件的顶部:
import sys
sys.path.insert(0, '/path/to/myapp')
activate_this = '/path/to/myapp/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
from myapp import app as application