访问Heroku部署的Flask应用程序时出错

时间:2020-04-20 20:28:09

标签: python flask heroku deployment

我有一个非常非常简单的Flask应用程序,我正在Heroku上对其进行测试,以查看其是否有效。我曾尝试使用Heroku CLI将其连接到GitHub存储库,但都没有改变结果。

from flask import Flask

app = Flask("__name__")


@app.route("/api", methods=["GET"])
def get():
    return {"success": "much success"}


app.run(debug=True)

我按照有关Udemy的教程进行了部署到Heroku的教程,但是它没有用。有人告诉我将这些文件添加到我的根目录:

// runtime.txt
python-3.8.3

// requirements.txt
// created by running pip3 freeze > requirements.txt
// manually added 'uwsgi'
appdirs==1.4.3
attrs==19.3.0
black==19.10b0
click==7.1.1
Flask==1.1.2
gunicorn==20.0.4
itsdangerous==1.1.0
Jinja2==2.11.2
MarkupSafe==1.1.1
pathspec==0.8.0
regex==2020.4.4
toml==0.10.0
typed-ast==1.4.1
Werkzeug==1.0.1
uwsgi

// uwsgi.ini
[uwsgi]
http-socket = :$(PORT)
master =true
die-on-term = true
module = app:app 
memory-report = true

// Procfile
web: uwsgi uwsgi.ini

在Heroku上访问我的应用程序时,出现“应用程序错误”。这是Heroku日志显示的内容:

2020-04-20T20:32:57.218876+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=ninny-code-flask.herokuapp.com request_id=d355b4b9-c532-4971-91fa-e3421ca98971 fwd="104.178.145.19" dyno= connect= service= status=503 bytes= protocol=https

2 个答案:

答案 0 :(得分:0)

我认为您缺少需要使用env变量$ PORT(由Heroku提供)分配的PORT

app.run(debug=False, port=int(os.environ.get("PORT", 5000)), host='0.0.0.0')

答案 1 :(得分:0)

查看您的调试输出,由于端口已在使用中,我看到脚本正在退出/崩溃。 检查是否有其他本地服务器在命令行或服务的同一端口上运行。看到这条线?它告诉您失败的原因。

OSError: [Errno 98] Address already in use

找到pid进程,然后将其关闭/终止。必须在端口上侦听另一个进程。您可以使用以下命令找出该过程:

$ lsof -i :5000

然后运行sudo终止进程。

sudo kill -9 <process_id>

但是,我现在在heroku日志中看到错误代码h10

如果在节点中,则会引发此错误。在js环境中,您忘记设置启动脚本了。 Heroku使用此脚本来启动您的应用程序,因此如果缺少该应用程序,则会抛出H10-App崩溃的错误代码消息。

检查您的Procfile文件,查找间距错误。

Wrong web : node server.js
Correct web:node server.js