我有一个自制的 Sinatra 应用程序,我打算使用 Heroku 来托管它。
我在开发中使用工头和霰弹枪,具有以下 Procfile:
web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV
它适用于开发和生产。但问题是,我不想在生产中使用霰弹枪,因为它太慢了。
您可以使用两个Procfiles
(例如Procfile
和Procfile.dev
)并使用foreman
s-f
选项来选择要在 dev 中使用的另一个:
在 dev 中(Procfile.dev
包含您的shotgun
Web 进程):
foreman start -f Procfile.dev
在生产中,foreman start
会回升正常Procfile
。
或者,您可以bin
使用脚本在您的应用程序中创建一个目录,以根据(我在Foreman 的创建者发表的评论$RACK_ENV
中发现的一个想法,因此值得考虑)启动适当的 Web 服务器。
在我看来,@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
这是一种使用 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'
在您的服务器和开发环境中导出不同的启动命令。
对于那些仍在寻找这个的人,根据文档 foreman
不再需要了。您可以简单地使用:
heroku local -f Procfile.dev