現象
- ローカルで一度に複数の API リクエストを送ると Rails server がハングアップする
-
Ctrl + C
を押下してもプロセスを終了できなくなる - lsof コマンドと kill コマンドを実行するなどして、プロセス終了させる必要がある
-
再現した環境
- rails:
v5.0.7.2
- 注意:
v5.2
以上では解決されている - 参考:https://github.com/rails/rails/pull/36939
- 注意:
解決方法
1. パッチを適用する
- rails に
v5.2
でマージされた修正をパッチとして適用することで解決できる
actionpack/lib/action_controller/metal/params_wrapper.rb
def model
- super || synchronize { super || self.model = _default_wrap_model }
+ super || self.model = _default_wrap_model
end
2. eager_load を true にする
- eager_load を true にすることでも解決できる
config/environments/development.rb
- config.eager_load = false
+ config.eager_load = true
3. puma の設定を変更する
- 同時に実行できるスレッドの数を1にすることでも解決できる
config/puma.rb
- threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
+ threads_count = ENV.fetch("RAILS_MAX_THREADS") { 1 }