我不能为我的生活想象为什么我试图推出的烧瓶应用程序无效。我在5美元的数字海洋液滴上运行它。这是(希望)你需要知道的一切:
目录布局(包含在/var/www/
中):
FlaskApp
FlaskApp
__init__.py
static
templates
venv
flaskapp.wsgi
__init__.py
:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "yay it worked"
if __name__ == "__main__":
app.run()
flaskapp.wsgi
:
#!/usr/bin/python
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 = 'Add your secret key'
FlaskApp.conf
(包含在/etc/apache2/sites-availble
中):
<VirtualHost *:80>
ServerName the.ip.blah.blah
ServerAdmin admin@mywebsite.com
WSGIScriptAlias / /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>
venv
是通过在virtualenv venv
内调用/var/www/FlaskApp/FlaskApp/
创建的。使用venv
输入pip install flask
后,我使用venv
在source venv/bin/activate
中安装了烧瓶。
Wsgi已启用(a2enmod wsgi
)。 FlaskApp.conf已启用(a2ensite FlaskApp
)。最后,我多次重启apache,但没有成功(service apache2 restart
)。
我正在关注如何设置烧瓶应用程序的this指南。
以下是我的错误的截图:
非常感谢任何帮助实现这一目标的帮助。
提前致谢。
编辑:我发现了问题:ImportError: No module named flask
。这有点奇怪,因为我在virtualenv中做了pip install flask
。当我在virtualenv中打开一个python控制台会话并尝试import flask
时,我没有收到任何错误,所以不确定发生了什么。
此外,该应用程序甚至如何使用venv
?我没有看到它被任何地方访问,所以它甚至使用它?也许这就是我得到ImportError
的原因,因为我只在virtualenv上安装了烧瓶,但它没有被使用?
答案 0 :(得分:2)
问题本质上是你在虚拟环境中安装Flask,可能还有其他必需的库,但是python(wsgi接口)运行的系统python没有安装这些额外的库。
我最近在Apache上运行Python的经验很少(我来自mod_python和cgi的时代),但显然一种方法是使用site
包来添加site-packages
从你的venv到执行的Python。这将放在您的.wsgi
文件中。
import site
site.addsitedir('/path/to/your/venv/lib/pythonX.X/site-packages')
答案 1 :(得分:0)
我认为解决问题的最佳方法是添加告诉您的wsgi文件有关您的虚拟环境并激活它: 将以下代码放入您的flaskapp.wsgi
中activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
并重启apache。 希望它会有所帮助! 找到更多here