连接到其python实例时出现Heroku错误:"连接被拒绝"

时间:2017-06-12 21:48:03

标签: python curl heroku

python启动成功,Heroku应用程序停留在"正在侦听端口5000",正如它应该由server.py

(...)
parser.add_argument('-p', '--port', type=int, default=5000, help='port number')
parser.add_argument('--debug', action='store_true', help='enable debug mode')
args = parser.parse_args()

if args.debug:
    app.debug = True

app.run(host='0.0.0.0')

这样可行,heroku logs --tail显示应用按预期启动。 heroku中的应用程序保留在" Running on http://0.0.0.0:33507/ (Press CTRL+C to quit)"

但是,当像curl -X POST https://APPNAME.herokuapp.com/search -H "Content-Type: application/json" -d '{ "text": "some_text"}'那样对我的heroku应用程序进行卷曲时,应用程序会无限制地停止

当做curl -X POST https://APPNAME.herokuapp.com:5000/search -H "Content-Type: application/json" -d '{ "text": "some_text"}'时(注意我在网址中添加了端口)我得到了

  

(7)无法连接到APPNAME.herokuapp.com端口5000:拒绝连接

如果端口作为标志-p 5000传递,则相同。

有谁知道为什么会发生这种情况?

非常感谢

1 个答案:

答案 0 :(得分:0)

请记住,您的应用程序绑定的端口与Heroku为您公开到Internet的端口相同。 Heroku为您监听http(端口80)和https(端口443)。所以你的curl命令应该省略URL中的端口。

Heroku的路由层充当应用程序的代理,应该绑定通过$PORT环境变量提供的端口。但是您无法直接连接到该端口(通过扩展,您无法通过HTTP以外的任何协议连接到您的应用程序)。

此外,您发布的代码中存在一个小错误 - server.py接受--port参数,但您不会将其传递给run()方法。您需要将其更改为app.run(host='0.0.0.0', port=args.port)。此外,请确保Procfile Web进程定义为web: python server.py --port $PORT,以便绑定到Heroku期望的端口(不保证是端口5000)。

希望有所帮助。