Puma Rails 5 binding.pry доступен только за 60 секунд до таймаута

Puma отключает мой запрос, когда я использую binding.pry. В моем контроллере

def new
  require 'pry'
  binding.pry
end

Затем я делаю запрос, который попадает в контроллер и вводит сеанс pry. Через 60 секунд Пума? разрывает мой запрос, перезапускает рабочего и впоследствии взрывается отладкой.

[1] pry(#<Agent::ClientsController>)> [3522] ! Terminating timed out worker: 3566
[3522] - Worker 0 (pid: 4171) booted, phase: 0

Я создал это приложение с подтяжками, если это имеет значение. Как продлить сеанс отладки в рельсах 5?

Ответ 1

Как насчет этого?

# config/puma.rb    
...

environment ENV['RACK_ENV'] || 'development'

...

if ENV['RACK_ENV'] == 'development'
  worker_timeout 3600
end

Изменить (Rails 5.1.5):

Поскольку ENV ['RACK_ENV'] пуст, я сделал следующее:

# config/puma.rb 

...

if ENV.fetch('RAILS_ENV') == 'development'
   puts "LOGGER: development => worker_timeout 3600"
   worker_timeout 3600
end

Ответ 2

Вы можете создать файл конфигурации и установить там время ожидания (для всех запросов, а не только для отладки). Я бы рекомендовал создать dev-specific и ссылаться на это при локальном запуске сервера (и не устанавливать значение большого тайм-аута для производства).

В приложении rails создайте файл типа /config/dev_puma_config.rb и в нем поставьте:

#!/usr/bin/env puma

worker_timeout 3600

Затем, когда вы запустите свой сервер, ссылайтесь на этот файл с помощью -C следующим образом:

bundle exec puma -t 1:1 -w 1 -p 3000 -e development -C config/dev_puma_config.rb

Как немного информации об этом параметре worker_timeout, вот что говорит об этом puma config:

Проверяет, что все работники проверили мастер-процесс внутри заданный тайм-аут. Если рабочий процесс не будет перезапущен. Эта не является таймаутом запроса, он должен защищать от зависания или смерти обработать. Установка этого значения не будет защищать от медленных запросов. Значение по умолчанию - 60 секунд.