Use different Procfile in development and production

不问归期 提交于 2019-11-28 15:28:57

问题


I have a homemade Sinatra application for which I intend to use Heroku to host it.

I use foreman and shotgun in development, with the following Procfile:

web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV

It works great with both development and production. But the thing is, I don't want to use shotgun in production since it's too slow.

Can we use separate Procfile configurations for both dev and prod?


回答1:


You could use two Procfiles (e.g. Procfile and Procfile.dev) and use foremans -f option to select a different one to use in dev:

In dev (Procfile.dev contains your shotgun web process):

foreman start -f Procfile.dev

In production, foreman start will pick up the normal Procfile.

Alternatively you could create a bin directory in your app with a script to start the appropriate web server depending on $RACK_ENV (an idea I found in a comment made by the creator of Foreman, so worth considering).




回答2:


@sharagoz 's comment on the selected answer, in my opinion, is the best option to allow you to still use foreman start without adding additional arguments AND keep your Procfile separate for Heroku.

To avoid the -f Procfile.dev parameter you can create a .foreman file with procfile: Procfile.dev in it – Sharagoz

In my applications root directory I created a .foreman file and as the comment states

.foreman

procfile: Procfile.dev

Procfile

web: bundle exec puma -C config/puma.rb

Procfile.dev

web: bundle exec puma -C config/puma.rb
webpacker: ./bin/webpack-dev-server



回答3:


Here is a way to handle it with one Procfile and environment variables. I am using this on Heroku.

Set your environment:

export WEB_START_COMMAND='node index.js'
export WORKER_START_COMMAND='node worker.js'

The Procfile:

web: eval '$WEB_START_COMMAND'
worker: eval '$WORKER_START_COMMAND'

Export different start command in your server and dev environments.




回答4:


For those still looking for this, according to the docs foreman is not needed anymore. You can simply use:

heroku local -f Procfile.dev



来源:https://stackoverflow.com/questions/11592798/use-different-procfile-in-development-and-production

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!