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 секунд.