Heroku ワーカー dyno でプロセス間で通信する方法を知りたいです。
Resque ワーカーがキューから読み取り、同じ dyno で実行されている別のプロセスにデータを送信するようにします。「他のプロセス」は、通常は TCP ソケット (ポート xyz) を使用してコマンドをリッスンする市販のソフトウェアです。Resque ワーカーが開始する前に、バックグラウンド プロセスとして実行するように設定されています。
ただし、その TCP ソケットにローカルで接続しようとすると、どこにも行きません。
キューを設定するための Rake タスクは次のことを行います。
task "resque:setup" do
# First launch our listener process in the background
`./some_process_that_listens_on_port_12345 &`
# Now get our queue worker ready, set up Redis backing store
port = 12345
ENV['QUEUE'] = '*'
ENV['PORT'] = port.to_s
Resque.redis = ENV['REDISTOGO_URL']
# Start working from the queue
WorkerClass.enqueue
end
リスナー プロセスが実行され、Resque がキューに入れられたタスクを処理しようとします。localhost:12345
ただし、 (具体的には)に接続できないため、Resque ジョブは失敗しErrno::ECONNREFUSED
ます。
おそらく、Heroku は同じ dyno で TCP ソケット通信をブロックしています。これを回避する方法はありますか?
私は状況から「コード」を取り出そうとし、コマンドラインで実行しました(サーバープロセスが12345に適切にバインドされていると主張した後):
nc localhost 12345 -w 1 </dev/null
しかし、これもつながりません。
現在、クライアント/サーバー コードを変更しUNIXSocket
てTCPSocket
.