无法从 Web 进程到达 Heroku 中的 "worker" 进程:`ConnectionRefusedError`
Cannot reach "worker" process in Heroku from web process: `ConnectionRefusedError`
我有一个 web
进程和一个 api
进程(类似于 the docs and these other docs 中描述的“工作”进程)。但是,我不明白不同进程之间的网络是如何工作的。
两个进程都在监听 0.0.0.0
,工作进程绑定到端口 5000。但是,当我尝试从 web
进程发出请求时,我得到一个 ConnectionRefusedError
:
ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=5000): Max retries exceeded with url: /tokenize?sentence=hello (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fd307019dc0>: Failed to establish a new connection: [Errno 111] Connection refused'))
我应该找出另一个进程的 IP 吗?我是不是做错了什么?
过程文件:
api: python app.py
web: voila UI.ipynb --port $PORT --Voila.ip=0.0.0.0
app.py:
from flask import Flask, request
from ie_utils import tokenize
app = Flask(__name__)
@app.route("/")
def home():
return {
"message": "Hello world!",
"version": "0.1",
}
if __name__ == "__main__":
import os
port = 5000
app.run(host="0.0.0.0", port=port)
UI.ipynb
中的相关代码:
import requests
requests.get("http://0.0.0.0:5000/")
完整源代码:https://github.com/astrojuanlu/ie-titanic-utils-a/tree/test-procfile
I don't understand how the networking between different processes works
除非你正在使用 Private Spaces (part of Heroku's enterprise offering), it doesn't:
The Common Runtime provides strong isolation by firewalling all dynos off from one another. The only traffic that can reach a dyno is web requests forwarded from the router to web processes listening on the port number specified in the $PORT
environment variable. Worker and one-off dynos cannot receive inbound requests.
我不是很清楚你想在这里做什么,但你无法通过向本地主机发出 HTTP 请求来完成。你可能会更好 运行 这作为两个独立的应用程序 - 在这种情况下你的 API 可能是它自己的 web
进程并且你的 Voilà 应用程序可以向 API 应用程序的请求主机名。
旁注:即使在允许这样做的系统上,您的请求也不应转到 0.0.0.0
。这不是真实的 IP 地址。
告诉 Flask 绑定到 0.0.0.0
实际上意味着它应该监听所有可用的 IP 地址。当你想发出请求时,你应该使用你的系统正在使用的真实主机名或 IP 地址之一,例如localhost
或 127.0.0.1
或其 public IP 地址或主机名之一。
我有一个 web
进程和一个 api
进程(类似于 the docs and these other docs 中描述的“工作”进程)。但是,我不明白不同进程之间的网络是如何工作的。
两个进程都在监听 0.0.0.0
,工作进程绑定到端口 5000。但是,当我尝试从 web
进程发出请求时,我得到一个 ConnectionRefusedError
:
ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=5000): Max retries exceeded with url: /tokenize?sentence=hello (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fd307019dc0>: Failed to establish a new connection: [Errno 111] Connection refused'))
我应该找出另一个进程的 IP 吗?我是不是做错了什么?
过程文件:
api: python app.py
web: voila UI.ipynb --port $PORT --Voila.ip=0.0.0.0
app.py:
from flask import Flask, request
from ie_utils import tokenize
app = Flask(__name__)
@app.route("/")
def home():
return {
"message": "Hello world!",
"version": "0.1",
}
if __name__ == "__main__":
import os
port = 5000
app.run(host="0.0.0.0", port=port)
UI.ipynb
中的相关代码:
import requests
requests.get("http://0.0.0.0:5000/")
完整源代码:https://github.com/astrojuanlu/ie-titanic-utils-a/tree/test-procfile
I don't understand how the networking between different processes works
除非你正在使用 Private Spaces (part of Heroku's enterprise offering), it doesn't:
The Common Runtime provides strong isolation by firewalling all dynos off from one another. The only traffic that can reach a dyno is web requests forwarded from the router to web processes listening on the port number specified in the
$PORT
environment variable. Worker and one-off dynos cannot receive inbound requests.
我不是很清楚你想在这里做什么,但你无法通过向本地主机发出 HTTP 请求来完成。你可能会更好 运行 这作为两个独立的应用程序 - 在这种情况下你的 API 可能是它自己的 web
进程并且你的 Voilà 应用程序可以向 API 应用程序的请求主机名。
旁注:即使在允许这样做的系统上,您的请求也不应转到 0.0.0.0
。这不是真实的 IP 地址。
告诉 Flask 绑定到 0.0.0.0
实际上意味着它应该监听所有可用的 IP 地址。当你想发出请求时,你应该使用你的系统正在使用的真实主机名或 IP 地址之一,例如localhost
或 127.0.0.1
或其 public IP 地址或主机名之一。