我有一个自制的Sinatra应用程序,我打算使用Heroku来托管它。
我在开发中使用foreman和shotgun,使用以下Procfile:
web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV
它适用于开发和生产。但问题是,我不想在生产中使用霰弹枪,因为它太慢了。
答案 0 :(得分:129)
您可以使用两个Procfiles
(例如Procfile
和Procfile.dev
)并使用foreman
s -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