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
传递,则相同。
有谁知道为什么会发生这种情况?
非常感谢
答案 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)。
希望有所帮助。