python - Flask 网站 -- 500 内部服务器错误

标签 python flask wsgi digital-ocean

我一生都无法弄清楚为什么我试图启动的这个 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 应用程序的指南。

这是我的错误的屏幕截图:

The Error

任何有关使其正常工作的帮助将不胜感激。

提前致谢。

编辑:我发现问题: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/

相关文章:

Python 对象在 nginx 中的每个请求后都会丢失状态

python - 计算以每个数据点为中心的固定半径球内数据点数的有效方法

python - 如何多线程 Flask 服务器和 python 脚本?

python - 如何在 Flask 上动态更新我的 Python 图表?

python - Graphene_sqlalchemy 和flask-sqlalchemy 对于什么构成有效的SQLAlchemy 模型存在分歧?

python - 使用 `waitress` 在多个端口上提供 Django 应用程序

python - 在 Python 中检查数百万个 MySQL 行

python - 使用 scrapy 在 Stack Overflow 中进行网页抓取,但我无法获得该问题的投票

python - VSCode python 解释器对内置函数发出警告

python - 为 wsgi 脚本别名添加参数