Heroku の dyno リソースを理解できておらず、rails server
でアプリケーションを起動していた。
Heroku は Web サーバとして Puma を推奨しているので、Puma で明示的に起動できるように設定を変更してみる。
Procfile
設定をせずシンプルに起動させるならば、Procfile に下記を記述する。
web: bundle exec puma
通常、rails new をするとconfig/puma.rb
にファイルが生成されている。
そして-C
でconfig/puma.rb
を指定すると、設定ファイルに書き込まれた設定を読み込んでくれる。
web: bundle exec puma -C config/puma.rb
config/puma.rb
config/puma.rb
の中身も確認してみる。
Rails 7.0.2.3
では次のようになっている。
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } threads min_threads_count, max_threads_count worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development" port ENV.fetch("PORT") { 3000 } environment ENV.fetch("RAILS_ENV") { "development" } pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } plugin :tmp_restart
max_threads_count
で使用する最大のスレッド数を決める。環境変数のRAILS_MAX_THREADS
がなければ 5 が設定される。
min_threads_count
は使用する最低のスレッド数を決める。環境変数のRAILS_MIN_THREADS
がなければ max_threads_count
を設定することになり、今回の場合は 5 となる。
threads
で、max_threads_count
とmin_threads_count
の値を利用し設定する。
worker_timeout
は、指定された時間内にすべてのワーカーがマスタープロセスにチェックインしたことを確認する。確認できない場合ワーカープロセスが再開される。
"RAILS_ENV"
が設定されていれば利用し、なければdevelopment
となり、3600 が設定される。
port
は利用するポートになる。
environment
は実行環境を指定する。
pidfile
は、環境変数のPIDFILE
を利用し、なければtmp/pids/server.pid
から値を取得する。
plugin
は Puma へ機能追加するときに使用する。今回の場合はサーバの再起動を可能にするプラグインが設定されている。