Heroku 领班:在开发和生产中使用不同的程序文件
我有一个自制的Sinatra应用程序,我打算使用Heroku来托管它 我在开发中使用工头和猎枪,并使用以下程序文件:Heroku 领班:在开发和生产中使用不同的程序文件,heroku,sinatra,rack,foreman,shotgun,Heroku,Sinatra,Rack,Foreman,Shotgun,我有一个自制的Sinatra应用程序,我打算使用Heroku来托管它 我在开发中使用工头和猎枪,并使用以下程序文件: web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV web: eval '$WEB_START_COMMAND' worker: eval '$WORKER_START_COMMAND' 它对开发和生产都非常有效。但问题是,我不想在生产中使用猎枪,因为它太慢了 我们可以为dev和prod使用单独的Pr
web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV
web: eval '$WEB_START_COMMAND'
worker: eval '$WORKER_START_COMMAND'
它对开发和生产都非常有效。但问题是,我不想在生产中使用猎枪,因为它太慢了
我们可以为dev和prod使用单独的Procfile配置吗?您可以使用两个
Procfiles
(例如Procfile
和Procfile.dev
)并用于选择在dev中使用的不同配置:
在dev中(Procfile.dev
包含您的shotgun
web进程):
在生产中,工头启动
将拾取正常的程序文件
或者,您可以使用脚本在应用程序中创建一个
bin
目录,以启动相应的web服务器,具体取决于$RACK_ENV
(这是我在a中发现的一个想法,非常值得考虑)。以下是一种使用一个Procfile和环境变量来处理它的方法。我在Heroku上用这个
设置您的环境:
export WEB_START_COMMAND='node index.js'
export WORKER_START_COMMAND='node worker.js'
程序文件:
web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV
web: eval '$WEB_START_COMMAND'
worker: eval '$WORKER_START_COMMAND'
在您的服务器和开发环境中导出不同的start命令。@sharagoz对所选答案的评论,在我看来,是允许您仍然使用
foreman start
而无需添加额外参数的最佳选择,并为Heroku保留单独的Procfile
为了避免-f Procfile.dev参数,您可以创建一个.foreman文件,其中包含Procfile:Procfile.dev
–Sharagoz
在我的应用程序根目录中,我创建了一个.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
根据
的说法,对于那些仍在寻找的人来说,不再需要工头了。您可以简单地使用:
heroku local-f Procfile.dev
您是否碰巧知道是否有方法告诉heroku运行另一个Procfile?@darko否,无法指定heroku运行的自定义Procfile。它将始终使用名为Procfile
的文件。为了避免使用-f Procfile.dev
参数,您可以在中使用Procfile:Procfile.dev
创建一个.foreman
文件it@bgentry那太可怕了,是故意的吗?对于那些碰巧使用节点工头的人,由于某些奇怪的原因,标志是-j而不是-f。当命令上有$PORT
时,这似乎不起作用。如果您希望每个环境有一组不同的进程,那么这有点有限@sharagoz的解决方案更灵活。在我的例子中,它是一个非常好的解决方案,简单且有效。