Foreman:在开发和生产中使用不同的Procfile

问题描述 投票:0回答:4

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

我在开发中使用 foreman 和 shotgun,并使用以下 Procfile:

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

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

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

heroku sinatra rack foreman shotgun
4个回答
160
投票

使用多个 Procfile 并指定

-f
--procfile
运行选项
选择一个:

在开发中(

Procfile.dev
包含您的
shotgun
网络进程):

foreman start -f Procfile.dev

生产中,

foreman start
会恢复正常
Procfile

或者,您可以在应用程序中创建一个

bin
目录,并使用脚本来根据
$RACK_ENV
启动相应的 Web 服务器(我在 Foreman 创建者的 评论中发现了这个想法,因此值得考虑)。


25
投票
在我看来,

@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

Procfile.dev

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

4
投票

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

设置您的环境:

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

Proc文件:

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

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


2
投票

对于那些仍在寻找此内容的人,根据docs,不再需要

foreman
。您可以简单地使用:

heroku local -f Procfile.dev

© www.soinside.com 2019 - 2024. All rights reserved.