我有一个自制的Sinatra应用程序,我打算使用Heroku来托管它。
在开发中,我使用foreman和shotgun,并拥有以下Procfile:
web: shotgun config.ru -s thin -o 0.0.0.0 -p $PORT -E $RACK_ENV
它在开发和生产环境下都运行良好。但问题在于,我不想在生产环境中使用shotgun,因为它太慢了。
Procfile
(例如 Procfile
和 Procfile.dev
),并使用 foreman
的 -f
选项 来选择不同的一个用于开发环境:Procfile.dev
包含你的 shotgun
web 进程):foreman start -f Procfile.dev
在生产环境中,foreman start
命令会使用正常的 Procfile
文件。或者,您可以在应用程序中创建一个 bin
目录,并编写一个脚本,根据 $RACK_ENV
变量来启动适当的 Web 服务器(这是 Foreman 的创建者在评论中提出的一个想法,值得考虑)。@sharagoz的评论是关于所选答案的,我认为这是最佳选择,可以让您仍然使用foreman start
而不添加额外的参数,并将您的 Procfile 保持与 Heroku 分离。
为了避免使用-f Procfile.dev参数,您可以创建一个包含
procfile: Procfile.dev
的.foreman文件 - Sharagoz
在我的应用程序根目录中,我创建了一个.foreman
文件,正如评论所述
.foreman
procfile: Procfile.dev
Procfileweb: bundle exec puma -C config/puma.rb
Procfile.dev
web: bundle exec puma -C config/puma.rb
webpacker: ./bin/webpack-dev-server
export WEB_START_COMMAND='node index.js'
export WORKER_START_COMMAND='node worker.js'
Procfile文件:
web: eval '$WEB_START_COMMAND'
worker: eval '$WORKER_START_COMMAND'
$PORT
时,这似乎无法正常工作。 - Pablote
Procfile
的那个文件。 - bgentry