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

时间:2016-04-15 20:57:37

标签: python flask wsgi digital-ocean

我不能为我的生活想象为什么我试图推出的烧瓶应用程序无效。我在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后,我使用venvsource venv/bin/activate中安装了烧瓶。

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

我正在关注如何设置烧瓶应用程序的this指南。

以下是我的错误的截图:

The Error

非常感谢任何帮助实现这一目标的帮助。

提前致谢。

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

此外,该应用程序甚至如何使用venv?我没有看到它被任何地方访问,所以它甚至使用它?也许这就是我得到ImportError的原因,因为我只在virtualenv上安装了烧瓶,但它没有被使用?

2 个答案:

答案 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