I need to jot down my Foreman-based web app setup real quick lest I forget.
When I build a Rails app (any web app, actually), it's not just the app itself anymore. There also are background jobs to be taken care of -- started, stopped, restarted. Usually these are required to run in production on a remote box, too, so I use Foreman to run those jobs. Foreman uses a Procfile
to learn about said jobs, gives me a dead-simple way to start and stop them, and provides me with color-coded output when they run. It's a great timesaver.
Then, when I deploy my app to a remote machine, I use Foreman's ability to export upstart
(or inittab
) configurations. For that, I have custom tasks in my Capistrano-based config/deploy.rb
file. Those halt the current jobs on the remote machine, trigger Foreman to write out new configurations for upstart
and re-start the jobs. (Please note: Foreman needs to be installed on the remote box as well.)
Since it took me a while to get this setup working, I figured I'd share it real quick.
My examples come from a Rails-based environment, but I tried to make them app-agnostic as possible.
This here "article" is basically a bare-bone, stripped down version of Tim Riley's "Run Your Own Piece of Heroku with Foreman".
- The Foreman gem is installed both on the local dev machine and the remote box
- Deployment is done using Capistrano
- The remote machine is running Ubuntu
- The remote machine has
upstart
installed
I think the restart block should be this?