Apache与Flask和wsgi的配置
我有一个小的网页应用,是用Flask和Python做的。在我用的内部服务器上,一切运行得很好。不过现在我想用Apache来运行它,但却不行。要知道,我之前从来没有接触过Apache或者网页相关的东西。
我用这个指南作为起点:http://flask.pocoo.org/docs/deploying/mod_wsgi/
现在我的应用程序在一个叫做“/rg/server.py”的文件里,内容是这样的:
app=Flask(__name__)
# all app routes...
if __name__ == '__main__':
app.run(
debug=True,
host="127.0.0.1",
port=80
)
然后我有一个wsgi文件,路径是“/rg/wsgi/minerva.wsgi”
import sys
sys.path.insert(0, /rg)
from server import app as minerva
最后,我还有一个Apache配置文件,路径是“etc/apach2/sites-available/minerva.com”:
<VirtualHost *>
ServerName minerva.test
WSGIDaemonProcess minerva threads=10
WSGIScriptAlias / /rg/wsgi/minerva.wsgi
<Directory /rg>
WSGIProcessGroup minerva
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
接着我用命令a2ensite minerva.com更新了Apache,这个操作成功了。然后我重新加载了Apache,没有出现错误。但是我还是无法访问minerva.test...
如果我输入apache2ctl -S,确实能看到minerva.test。
我不知道哪里出错了...
系统信息:
操作系统:debian 64位
Python版本:2.7
2 个回答
0
我首先会检查一下mod_wsgi是否已经安装并且被apache加载。如果这一切都没问题,你的设置和我的很相似,只是有一些小的不同:
- 我需要在我的VirtualHost定义上方添加一行:WSGISocketPrefix /var/run/wsgi。可以参考这里。
- 我在WSGIDaemonProcess这一行中加入了用户和组的值。
0
对于mod_wsgi来说,WSGI应用程序的入口点必须叫做'application'。你现在的代码是:
from server import app as minerva
应该改成:
from server import app as application
不过你现在连这一步都没做到,否则这一行:
sys.path.insert(0, /rg)
会出现语法错误。
再往回看,原本应该是:
<VirtualHost *>
你应该写成:
<VirtualHost *:80>
最后,如果'minerva.test'这个地址实际上无法解析,你就无法继续了。
所以请在你的问题中填上你在浏览器中使用的实际网址,并且说明'minerva.test'是否在本地的hosts文件中列出。