Flask 网站 -- 500 Internal Server Error

Flask website -- 500 Internal Server Error

我一辈子都想不通为什么我尝试启动的这个烧瓶应用程序不起作用。我 运行 它在一个 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 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 是通过在 /var/www/FlaskApp/FlaskApp/ 中调用 virtualenv venv 创建的。使用 source venv/bin/activate 输入 venv 后,我使用 pip install flaskvenv 中安装了烧瓶。

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 上安装了 flask 但它没有被使用?

问题本质上是您在虚拟环境中安装了 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')

我认为解决您的问题的最佳方法是添加告诉您的 wsgi 文件关于您的虚拟环境并激活它: 将以下代码放入您的 flaskapp.wsgi

activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

并重新启动 Apache。 希望它会有所帮助! 查找更多 here