what is the "foreman way" for behaving differently in production vs development? That is we want foreman start to start up a bunch of stuff in dev, however in heroku production we don't need it to start (for example) solr.
I follow the convention;
Procfile
defines all processes.foreman
set specific foreman variablesDevelopment:
.env
sets environment variables for each developer.env.example
sets defaults for developmentforeman start
starts all processesProduction:
heroku config
sets environment variablesheroku ps:scale
turns on or off whichever processes are needed for productionHere's an example from a project.
Procfile:
web: bundle exec unicorn_rails -p $PORT -c ./config/unicorn.rb
worker: bundle exec rake jobs:work
search: bundle exec rake sunspot:solr:run
.env.example:
# default S3 bucket
S3_KEY=keykeykeykeykeykey
S3_SECRET=secretsecretsecret
S3_BUCKET=myapp-development
.env
# developer's private S3 bucket
S3_KEY=mememememememememe
S3_SECRET=mysecretmysecret
S3_BUCKET=myapp-development
.foreman:
# development port is 3000
port: 3000
Foreman takes arguments to use a different file (-d) and arguments to specify what to run. It also supports a .foreman
file that allows those args to become default. See http://ddollar.github.com/foreman/ for more info
I've used environment-specific Procfile
s before, which is pretty simple and works fine.
Basically you have Procfile.development
, Procfile.production
, etc. In each you can customize the procs you want to start, then run them via foreman
like so:
foreman start -f Procfile.development
Another approach is to reference scripts in your Procfile
, and within each script start up the appropriate process based on the environment. The creator of Foreman does this and has an example from his Anvil project your reference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With