Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku 领班:在开发和生产中使用不同的程序文件_Heroku_Sinatra_Rack_Foreman_Shotgun - Fatal编程技术网

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

我有一个自制的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使用单独的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的解决方案更灵活。在我的例子中,它是一个非常好的解决方案,简单且有效。