Heroku Flask - 从教程中部署“模块化”应用程序无法正常工作,工头开始在本地工作

时间:2014-03-14 22:13:31

标签: python heroku flask

基于此结构:http://flask.pocoo.org/docs/patterns/packages/

我也试过这篇文章:Deploying Flask app to Heroku

我无法在heroku上工作。我通常得到的PORT没有在60秒内设置错误。我已阅读其他SO帖子,无法弄清楚我的项目结构是否错误或我的procfile。我也试过了5000以外的其他端口。

这是我目前的项目结构:

/myapplication
    Procfile
    runserver.py
    /applicationfolder
        __init__.py
        views.py

这是我的Procfile

web: python runserver.py $PORT

这是我的runserver.py

from applicationfolder import app
app.run()

if __name__ == '__main__':
    import os
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

这是我的 init .py

import os

from flask import Flask
from flask import render_template, jsonify, request

app = Flask(__name__)

app.config.from_object('config')

import applicationfolder.views

从那里开始view.py运行。

这适用于foreman start和python runserver.py本地,但不适用于heroku。我用PORT尝试了很多东西但是端口似乎没有设置与PORT不同的PORT。我认为它与我的项目结构有关。

1 个答案:

答案 0 :(得分:2)

app.run()在那里两次,正如你所指出的那样是什么搞砸了。 app.run()调用一个简单的纯python开发服务器,以便您可以轻松地运行和/或调试脚本。

通过在模块级别调用它(在runserver.py中导入的右下方),你有效地尝试在加载python代码时启动开发服务器,然后在从Procfile调用它时运行它,开发服务器已经开始运行,已经开始使用它的默认设置(Flask的最新版本从SERVER_NAME环境变量中提取相关的默认值)。通过在两个地方都有它,你试图两次调用该方法。

你基本上想要直接模块加载(在这种情况下,杀掉&#34下的代码;如果名称 ...",或者你在调用时使用代码在 main 下,在这种情况下,不要在模块加载时启动服务。