在生产与开发中表现不同的“工头方式”是什么?那就是我们希望工头开始在 dev 中启动一堆东西,但是在 heroku 生产中我们不需要它来启动(例如)solr。
问问题
9299 次
4 回答
22
我遵守约定;
Procfile
定义所有进程.foreman
设置特定工头变量
发展:
.env
为每个开发者设置环境变量.env.example
为开发设置默认值foreman start
启动所有进程
生产:
heroku config
设置环境变量heroku ps:scale
打开或关闭生产所需的任何流程
这是一个项目的例子。
档案:
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
于 2013-01-13T23:32:33.673 回答
3
Foreman 接受参数来使用不同的文件 (-d) 和参数来指定要运行的内容。它还支持.foreman
允许这些 args 成为默认值的文件。有关更多信息,请参阅http://ddollar.github.com/foreman/
于 2013-01-13T21:50:55.733 回答
1
我之前使用过 environment-specific Procfile
,它非常简单并且工作正常。
基本上你有Procfile.development
,Procfile.production
等等。在每一个中你可以自定义你想要启动的过程,然后foreman
像这样运行它们:
foreman start -f Procfile.development
另一种方法是引用您的脚本Procfile
,并在每个脚本中根据环境启动相应的进程。Foreman 的创建者做到了这一点,并从他的 Anvil 项目中提供了一个示例供您参考。
于 2016-05-12T17:55:59.863 回答
0
我们的解决方案是在我们的 Procfile 中为开发与生产使用单独的作业类型。这不是最干燥的方法,但它有效......
sidekiq: bundle exec sidekiq
sidekiq-prod: bundle exec sidekiq -e production
然后我们在生产系统上运行 foreman 指定 prod 作业:
foreman start -c sidekiq-prod=4
于 2021-10-09T19:58:47.457 回答