19

在生产与开发中表现不同的“工头方式”是什么?那就是我们希望工头开始在 dev 中启动一堆东西,但是在 heroku 生产中我们不需要它来启动(例如)solr。

4

4 回答 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 回答