所以我确实有一个烧瓶应用程序,我可以在我的计算机本地运行它并成功部署到heroku但是当我heroku open
时,该网站继续说应用程序错误。
这是我的app.py:
import random
import os
from flask import Flask
from gen_histogram import histogram
from sample import generate_probability, generate_word
app = Flask(__name__)
dict_histogram = histogram('tom_sawyer.txt')
tes_list = ["one", "fish", "two", "fish", "red", "fish", "blue", "fish"]
def try_random():
return random.choice(tes_list)
@app.route('/')
def hello_world():
return try_random()
if __name__ == '__main__':
port = int(os.environ.get("PORT", 5000))
app.run(debug=True, port=port)
Procfile:
web: gunicorn app:app
注意:
我有一切设置,包括virtualenv和requirements.txt
答案 0 :(得分:4)
我认为很可能是那个枪炮没有使用正确的端口。 Heroku为应用程序分配端口。我不完全确定该端口是随机分配还是默认端口。但是,如果这是导致问题的原因,将Procfile
更改为此应修复它:
web: gunicorn -b :$PORT app:app
这种方式可以捕获Heroku所做的任何端口分配。或者,如果您选择为PORT
设置环境变量,它也会使用它。 gunicorn默认为端口8000,因此在Heroku上将PORT
环境变量设置为8000也应该有效。
我非常确定app.run
不会以任何方式影响gunicorn服务器。我认为gunicorn只是在app:app
(module:appinstance
)指定的模块中找到应用程序实例,并加载视图。
答案 1 :(得分:0)
我在包含
的根文件夹中创建了一个名为Procfile
的文件
web: gunicorn -b :$PORT app:app
我是我的app.py
,
import os
...
port = int(os.environ.get('PORT', 5000))
...
app.run(host='0.0.0.0', port=port, debug=True)
Heroku dyno将设置它自己的PORT env,应用将使用它,而不是我在本地使用的默认5000。
https://github.com/Sean-Bradley/Seans-Python3-Flask-Rest-Boilerplate上的工作示例