我有一个自制的 Sinatra 应用程序,我打算使用 Heroku 来托管它。
我在开发中使用 foreman 和 shotgun,并使用以下 Procfile:
web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV
它非常适合开发和生产。但问题是,我不想在生产中使用霰弹枪,因为它太慢了。
-f
或 --procfile
运行选项 选择一个:
在开发中(
Procfile.dev
包含您的shotgun
网络进程):
foreman start -f Procfile.dev
生产中,
foreman start
会恢复正常Procfile
。
或者,您可以在应用程序中创建一个
bin
目录,并使用脚本来根据 $RACK_ENV
启动相应的 Web 服务器(我在 Foreman 创建者的 评论中发现了这个想法,因此值得考虑)。
@sharagoz 对所选答案的评论是允许您仍然使用
foreman start
而不添加其他参数并使您的 Procfile 与 Heroku 分开的最佳选择。
为了避免使用 -f Procfile.dev 参数,您可以创建一个包含
的 .foreman 文件 – Sharagozprocfile: Procfile.dev
在我的应用程序根目录中,我创建了一个
.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
这是一种使用一个 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'
在您的服务器和开发环境中导出不同的启动命令。