rails localhost + heroku puma 配置

rails localhost + heroku puma config

我有一个 rails 应用程序,在 heroku 上部署了 puma。一切似乎都很好,除非我在开​​发环境中启动我的应用程序,端口是 5000 而不是 3000。

为什么会这样?根据我的配置文件,它应该回落到 3000,就像线程和并发数一样(它们工作正常)。

Procfile.dev

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

config/puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  ActiveRecord::Base.establish_connection
end

使用 foreman start -f Procfile.dev

启动服务器后
12:36:51 web.1     | [12816] Puma starting in cluster mode...
12:36:51 web.1     | [12816] * Version 2.13.4 (ruby 2.2.3-p173), codename: A Midsummer Code's Dream
12:36:51 web.1     | [12816] * Min threads: 5, max threads: 5
12:36:51 web.1     | [12816] * Environment: development
12:36:51 web.1     | [12816] * Process workers: 2
12:36:51 web.1     | [12816] * Preloading application
12:37:08 web.1     | [12816] * Listening on tcp://0.0.0.0:5000
12:37:08 web.1     | [12816] ! WARNING: Detected 1 Thread(s) started in app boot:
12:37:08 web.1     | [12816] ! #<Rack::MiniProfiler::FileStore::CacheCleanupThread:0x007f860f8fa628@/Users/Silo/.rvm/gems/ruby-2.2.3/gems/rack-mini-profiler-0.9.8/lib/mini_profiler/storage/file_store.rb:53 sleep> - /Users/Silo/.rvm/gems/ruby-2.2.3/gems/rack-mini-profiler-0.9.8/lib/mini_profiler/storage/file_store.rb:71:in `sleep'
12:37:08 web.1     | [12816] Use Ctrl-C to stop
12:37:08 web.1     | [12816] - Worker 0 (pid: 12822) booted, phase: 0
12:37:08 web.1     | [12816] - Worker 1 (pid: 12823) booted, phase: 0

至于为什么,foreman 将 $PORT 传递给您的进程,默认设置为 5000。因此,端口 3000 在您的 config/puma.rb 中被忽略。请参阅此线程的末尾 https://github.com/ddollar/foreman/issues/381

现在,有几种方法可以解决这个问题。例如,您可以按如下方式启动 foreman:foreman s -p 3000。这是我的首选解决方案,因为它不涉及为开发创建特定的 procfile,也不添加到 .env 文件(PORT=3000),也不创建 .env 文件。工头文件(端口:3000)。

如果你真的想使用你的开发procfile,改变它如下:web: PORT=3000 bundle exec puma -C config/puma.rb