基于此结构: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
web: python runserver.py $PORT
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)
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。我认为它与我的项目结构有关。
答案 0 :(得分:2)
app.run()在那里两次,正如你所指出的那样是什么搞砸了。 app.run()调用一个简单的纯python开发服务器,以便您可以轻松地运行和/或调试脚本。
通过在模块级别调用它(在runserver.py中导入的右下方),你有效地尝试在加载python代码时启动开发服务器,然后在从Procfile调用它时运行它,开发服务器已经开始运行,已经开始使用它的默认设置(Flask的最新版本从SERVER_NAME环境变量中提取相关的默认值)。通过在两个地方都有它,你试图两次调用该方法。
你基本上想要直接模块加载(在这种情况下,杀掉&#34下的代码;如果名称 ...",或者你在调用时使用代码在 main 下,在这种情况下,不要在模块加载时启动服务。