工头: 在开发和生产中使用不同的剖面图

我有一个自制的西纳特拉应用程序,我打算用 Heroku 来主持它。

我在开发中使用 Foreman 和霰弹枪,具体如下:

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

它对于开发和生产都非常有效,但问题是 我不想在制作过程中使用散弹枪太慢了。

我们可以为开发人员和产品使用单独的 Procfile 配置吗?

23252 次浏览

您可以使用两个 Procfiles(例如 ProcfileProcfile.dev)并使用 ABC3s -f选项选择另一个在 dev 中使用的 Procfiles:

在 dev 中(Procfile.dev包含您的 shotgun web 进程) :

foreman start -f Procfile.dev

在生产中,foreman start将采用正常的 Procfile

或者,你可以在你的应用程序中创建一个 bin目录,用一个脚本根据 $RACK_ENV启动适当的 web 服务器(这是我在 由福尔曼的创作者发表的评论中发现的一个想法,所以值得考虑)。

这里有一个方法来处理它与一个 Procfile 和环境变量。

设定你的环境:

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

概况:

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

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

在我看来,@sharagoz 对所选答案的评论是允许您仍然使用 foreman start而不添加额外参数的最佳选择,并且为 Heroku 保持您的 Profile 独立。

为了避免-f Procfile.dev 参数,您可以创建一个. foreman 文件,其中包含 procfile: Procfile.dev-Sharagoz

在我的应用程序根目录中,我创建了一个 .foreman文件,如注释所示

. Foreman

procfile: Procfile.dev

侧写

web: bundle exec puma -C config/puma.rb

Procfile.dev

web: bundle exec puma -C config/puma.rb
webpacker: ./bin/webpack-dev-server

对于那些仍然在寻找这个,根据 医生 foreman不再需要。你可以简单地使用:

heroku local -f Procfile.dev