Eben hatte ich ein schräges Problem. Ich schreibe an einem node.js Server, der eine MongoDB und Redis angebunden hat. Die drei Prozesse verwalte ich mit foreman (Version 0.60.0). Dazu habe ich ein Procfile und eine Datei mit Konfigurationsvariablen erstellt:

# Procfile
mongo: mongod
redis: redis-server
web: nodemon app.js

# Env file
PORT=3000

Über die Reihenfolge habe ich mir erst nicht so viele Gedanken gemacht. Intuitiv ist der node Server am Ende gelandet, weil idealerweise Mongo und Redis zum Start schon laufen sollten. Gedacht war es natürlich so, dass der Server auf den Port in der Konfigurationsdatei hört.

1app.listen( process.env.PORT );

Tatsächlich hörte der Server dann aber immer auf PORT + 200. Gab ich 3000 an, lief er im Endeffekt auf 3200. Bei 3333 waren es 3533, bei 3200 3400 usw. Ursprünglich dachte ich, dass Redis oder Mongo sich zuvor schon Port 3000 gegriffen hatten, dem war aber nicht so.

Testweise startete ich Redis und Mongo nicht mehr. Voilá: Server läuft auf localhost:3000. Sobald Redis exklusiv-oder Mongo aber wieder dabei waren, lief er auf 3100. Wurden alle drei gestartet, war es wieder Port 3200.

Das Problem? Ich habe keine Ahnung. Vielleicht ist es auch gar kein Bug, sondern Feature (trotzdem habe ich ein Issue auf Github aufgemacht). Die Lösung? Node zuerst starten:

# Procfile
web: nodemon app.js
mongo: mongod
redis: redis-server