2012-03-05 3 views
5

私はそうのようなProcfileを持っている:は、(使用するポート)

web:  bundle exec rails server -p $PORT 
em:  script/eventmachine 

emプロセスは、(ENV['PORT']ポート)start_serverとeventmachineを発射し、私のWebプロセスは時折通信する必要がありますそれと。

私の質問はどのようにWebプロセスがそれと通信するためのポートを知っていますか? herokuが正しく理解されていれば、プロセスが起動するときにランダムなポートが割り当てられます(psがkillまたは再起動されると変更される可能性があります)。ありがとう!

答えて

3

プロセスは分離されており、互いに直接通信することはできません。

http://www.12factor.net/processes

いくつかの他の方法は、しかし、があります。一つはRedisやPostgresのようなバッキングサービスを使って仲介者として働くことです - もう一つはFIFOを使って通信することです。

http://en.wikipedia.org/wiki/FIFO

は、それはあなたのプロセスが孤立して共有ナッシングです良いことですが、これに対応するために、少し異なるアーキテクチャにあなたのアプリケーションが必要です。

+2

私はredisか何かでFIFOキューを行うことができましたが、プロセスが互いに通信できないことは確かですか?イベント・マシンのサーバー/クライアントは、Webプロセスが入ってくるtcpip要求を受け入れるように、標準のtcpipでお互いに会話することができます。私はちょうど接続するポートがわからない。答えをありがとう - Adam Wigginsの12factorのページは本当に面白いです。 –

+1

はい。あなたのWebプロセスには、外部から要求を受け取るためのポートが割り当てられています。他のプロセス間通信はありません。この類似の質問を参照してください:http://stackoverflow.com/questions/9322599/tcp-socket-communication-between-processes-on-heroku-worker-dyno/9453432#9453432 –

+1

これは役に立ちました。私はうまくいきました。耐久性はありませんが、この後にiron_mqを試して、代わりにイベントマシンからポーリングします。助けてくれてありがとう!ほんとうにありがとう。 –

1

Herokuのドキュメントによると、同じダイノ上を実行している

2つのプロセスは、彼らが好きなポートを使用してTCP/IP経由で通信することができます。

異なる2つのプロセス dynosはTCP/IPで通信することはできません。 memcached、データベース、またはHerokuプラグインの1つを使用して通信する必要があります。

+0

この文書の最新版は[こちら](https://devcenter.heroku.com/articles/dynos#networking)です。 – weibeld