繁体   English   中英

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

[英]Flask website -- 500 Internal Server Error

我一生都无法弄清楚为什么我尝试启动的这个烧瓶应用程序不起作用。 我在 5 美元的 Digital Ocean 液滴上运行它。 这是(希望)您需要了解的所有信息:

目录布局(包含在/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 flask flask 在venvpip install flask

Wsgi 已启用 ( a2enmod wsgi )。 FlaskApp.conf 已启用( a2ensite FlaskApp )。 最后,我多次重新启动 apache,但都没有成功( service apache2 restart )。

我下面这个关于如何建立一个烧瓶应用指南。

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

错误

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

提前致谢。

编辑:我发现了问题: ImportError: No module named flask 这有点奇怪,因为我确实在 virtualenv pip install flask执行了pip install flask 当我只是在 virtualenv 中打开一个 python 控制台会话并尝试import flask我没有收到任何错误,所以不确定发生了什么。

另外,这个应用程序如何使用venv 我没有看到它在任何地方被访问,那么它是如何使用它的? 也许这就是我收到ImportError原因,因为我只在 virtualenv 上安装了 Flask 但它没有被使用?

问题本质上是您在虚拟环境中安装 Flask,可能还有其他需要的库,但是 python(wsgi 接口)与系统 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')

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

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

并重新启动apache。 希望它会有所帮助! 这里找到更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM