74

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

我在开发中使用工头和霰弹枪,具有以下 Procfile:

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

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

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

4

4 回答 4

151

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

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

foreman start -f Procfile.dev

在生产中,foreman start会回升正常Procfile

或者,您可以bin使用脚本在您的应用程序中创建一个目录,以根据(我在Foreman 的创建者发表的评论$RACK_ENV中发现的一个想法,因此值得考虑)启动适当的 Web 服务器。

于 2012-07-21T20:27:11.087 回答
19

在我看来,@sharagoz 对所选答案的评论是让您在foreman start不添加额外参数的情况下仍然使用并将 Procfile 与 Heroku 分开的最佳选择。

为避免使用 -f Procfile.dev 参数,您可以procfile: Procfile.dev在其中创建一个 .foreman 文件 – Sharagoz

在我的应用程序根目录中,我创建了一个.foreman文件,正如评论所述

。领班

procfile: Procfile.dev

档案

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

程序文件.dev

web: bundle exec puma -C config/puma.rb
webpacker: ./bin/webpack-dev-server
于 2018-10-18T17:26:04.277 回答
4

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

设置环境:

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

过程文件:

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

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

于 2017-06-09T23:06:19.677 回答
2

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

heroku local -f Procfile.dev

于 2019-04-04T11:18:13.380 回答