The Procfile is a way to define how the platform will try to start your containers. In this file, you can define all the different process you would like to run in your project from the same code base. It is commonly used to define how to start workers which will consume asynchronous jobs.
A Procfile is basically a text file using the YAML format describing how to start each type of container for your app. It has to be located at the root of your project. Environment variables will be interpolated.
web: bundle exec rails server -p $PORT -e $RAILS_ENV worker: bundle exec sidekiq -e $RAILS_ENV
By default, when you first try to deploy your application, we’ll try to
web process. We try to determine it without your help, but in
some cases it is required to define it, as in the previous example. If your
application requires a
Procfile and you haven’t defined it, your deployment
will fail and a log entry will attest the lack of Procfile.
The standard syntax is:
<container type>: <command> container type: should contain letters and digits only command: any command line which can includes environment variables
The Procfile is also the place to declare a post-deploy hook. More information here.
Using in development
To reduce the environment gap between the development and the production, it is important to execute the same processes in development and in any deployed environment.
To achieve this different tools exist. The most famous is
foreman. A little
gem executing and displaying the output of all the processes defined in your
└> cat Procfile web: bin/project worker: bin/project -worker └> foreman start 17:52:56 web.1 | started with pid 10663 17:52:56 worker.1 | started with pid 10664 17:52:56 web.1 | 2014/12/01 17:52:56 Listen HTTP requests on :5000 17:52:56 worker.1 | 2014/12/01 17:52:56 Starting Asynchronous worker
To install it:
gem install foreman
Alternatives to foreman: