"Foreman way"是指在生产环境和开发环境中的不同行为。在开发环境中,我们希望Foreman启动大量东西;但是在Heroku生产环境中,我们不需要它启动Solr(例如)。
"Foreman way"是指在生产环境和开发环境中的不同行为。在开发环境中,我们希望Foreman启动大量东西;但是在Heroku生产环境中,我们不需要它启动Solr(例如)。
我遵循惯例:
Procfile
定义所有进程.foreman
设置特定的 foreman 变量开发环境:
.env
为每个开发人员设置环境变量.env.example
为开发环境设置默认值foreman start
启动所有进程生产环境:
heroku config
设置环境变量heroku ps:scale
开启或关闭生产所需的任何进程以下是一个项目示例。
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
.工头:
# development port is 3000
port: 3000
Foreman 接受传入参数来使用不同的文件 (-d),以及指定要运行什么命令。它还支持一个 .foreman
文件,使这些参数成为默认值。更多信息请参见 http://ddollar.github.com/foreman/
Procfile
,这很简单并且有效。基本上你需要有Procfile.development
、Procfile.production
等文件,在每个文件中你可以自定义要启动的进程,然后通过foreman
运行它们,如下所示:foreman start -f Procfile.development
Procfile
中引用脚本,并在每个脚本内根据环境启动适当的进程。Foreman的创建者这样做,并且有他的Anvil项目示例供您参考。sidekiq: bundle exec sidekiq
sidekiq-prod: bundle exec sidekiq -e production
然后我们在生产系统上运行foreman,指定prod作业:
foreman start -c sidekiq-prod=4