Search code examples
processherokuporteventmachine

Communicating between two processes on heroku (what port to use)


I have a Procfile like so:

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

The em process fires up an eventmachine with start_server (port ENV['PORT']) and my web process occasionally needs to communicate with it.

My question is how does the web process know what port to communicate with it on? If I understand heroku correctly it assigns you a random port when the process starts up (and it can change if the ps is killed or restarted). Thanks!


Solution

  • Processes are isolated and cannot communicate directly with each other.

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

    There are, however, a few other ways. One is to use a backing service such as Redis, or Postgres to act as an intermediary - another is to use FIFO to communicate.

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

    It is a good thing that your processes are isolated and share-nothing, but you do need to architecture your application slightly differently to accommodate this.