在开发和生产中使用不同的Procfile

时间:2012-07-21 13:56:13

标签: heroku sinatra rack foreman shotgun

我有一个自制的Sinatra应用程序,我打算使用Heroku来托管它。

我在开发中使用foreman和shotgun,使用以下Procfile:

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

它适用于开发和生产。但问题是,我不想在生产中使用霰弹枪,因为它太慢了。

我们可以为dev和prod使用单独的Procfile配置吗?

4 个答案:

答案 0 :(得分:129)

您可以使用两个Procfiles(例如ProcfileProcfile.dev)并使用foremans -f option选择要在开发中使用的其他人:

在开发中(Procfile.dev包含您的shotgun网络流程):

foreman start -f Procfile.dev

在制作中,foreman start会获得正常的Procfile

或者,您可以在应用中使用脚本创建bin目录,以根据$RACK_ENV启动相应的Web服务器(我在comment made by the creator of Foreman中找到了一个想法,因此值得考虑)

答案 1 :(得分:4)

我认为,

@sharagoz对所选答案的评论是最好的选择,它使您可以继续使用foreman start而无需添加其他参数,并使Procfile与Heroku分开。

  

要避免使用-f Procfile.dev参数,您可以创建一个包含procfile: Procfile.dev – Sharagoz的.foreman文件

在我的应用程序根目录中,我创建了一个.foreman文件,并按注释说明了

.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

答案 2 :(得分:2)

这是一种使用一个Procfile和环境变量来处理它的方法。我在Heroku上使用它。

设置环境:

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

Procfile:

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

在服务器和开发环境中导出不同的启动命令。

答案 3 :(得分:1)

对于那些仍在寻找这个的人,不再需要docs foreman。您可以简单地使用:

heroku local -f Procfile.dev