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 へ機能追加するときに使用する。今回の場合はサーバの再起動を可能にするプラグインが設定されている。