如何在不使用Flask的情况下将Python应用程序绑定到Heroku上的端口?

时间:2015-04-06 16:56:53

标签: python-3.x heroku timeout cloud port

我正在尝试在heroku上运行一个简单的应用程序。它根本不使用Flask,脚本只需要运行一次,它将(或应该)保持活着。它在本地运行良好,它在我的VPS上运行良好。我真的想将它部署到heroku,以便于维护/插件。所以我部署了它,确保安装了所有依赖项等等。

这是我的Procfile:

web: newrelic-admin run-program python dragon.py

但是当我尝试运行它时,它会在我收到此错误之前正常运行几秒钟:

heroku/web.1: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 

在这几秒钟内,它甚至会响应命令(它是一个聊天机器人),但不可避免地因为无法绑定错误而失败。我尝试了几种解决方案,例如将$PORT添加到我的proc文件中,但没有一种解决方案。我尝试使用gunicorn并且应用程序将运行,但它不会接收或响应传入的命令。

我很茫然,有没有人知道为不运行Flask的Python应用程序绑定端口的万无一失的方法?我找不到任何没有以某种方式使用Flask的答案,但添加Flask似乎也没有起作用。我只需要这个应用程序按原样运行,但绑定到一个端口,以便它保持打开状态。

这是我的日志的屏幕截图,显示了请求/响应标头,甚至是应用程序在崩溃之前发送的第一个keepalive信号。

http://puu.sh/h3Jo2/e689e9ba38.png

首先编辑:我联系了Heroku支持,让我的启动超时增加到120秒。它仍然无法绑定到$ PORT,尽管它一直运行并一直工作直到它崩溃。我也尝试在配置变量中指定一个端口,但无济于事。这是我的日志的屏幕截图,显示120秒后无法启动(两次):http://puu.sh/h4e4r/11c50a5ae7.png

1 个答案:

答案 0 :(得分:3)

好吧,我明白了。我再次联系了支持,发现我使用了错误的流程类型。我现在将它作为bot进程运行,所以我的Procfile现在看起来像这样:

bot: newrelic-admin run-program python dragon.py

这允许它在不绑定端口的情况下运行。