我一生都无法弄清楚为什么我试图启动的这个 flask 应用程序不起作用。我在 5 美元的 Digital Ocean Droplet 上运行它。这是(希望)您需要了解的所有信息:
目录布局(包含在 /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 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="19787d7470775974606e7c7b6a706d7c377a7674" rel="noreferrer noopener nofollow">[email protected]</a>
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
安装了flask使用pip install flask
输入venv
后使用source venv/bin/activate
.
Wsgi 已启用 ( a2enmod wsgi
)。 FlaskApp.conf 已启用 (a2ensite FlaskApp
)。最后,我多次重新启动 apache,但没有成功( service apache2 restart
)。
我正在关注this有关如何设置 Flask 应用程序的指南。
这是我的错误的屏幕截图:
任何有关使其正常工作的帮助将不胜感激。
提前致谢。
编辑:我发现问题:ImportError: No module named flask
。这有点奇怪,因为我确实这样做了 pip install flask
在虚拟环境中。当我在 virtualenv 中打开 python 控制台 session 并尝试 import flask
时我没有收到任何错误,所以不确定发生了什么。
此外,这个应用程序如何使用 venv
?我没有看到它在任何地方被访问,那么它是如何使用它的呢?也许这就是为什么我得到 ImportError
,因为我只在 virtualenv 上安装了 Flask 但它没有被使用?
最佳答案
问题本质上是您正在虚拟环境中安装 Flask 以及可能其他所需的库,但 python(wsgi 接口(interface))与系统 python 一起运行,而系统 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')
关于python - Flask 网站 -- 500 内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656702/