настройки отставания пумы похожи на единорога?

Unicorn принимает конфигурацию listen, которая позволяет установить backlog в мс, если воркер занят. Уменьшение этого значения позволяет маршрутизатору отправлять запрос другому работнику, если он занят.

Есть ли что-то подобное для Puma? Я не мог быть в состоянии найти такую ​​​​вещь.

Это было бы очень удобно на Heroku.


person Martin    schedule 12.09.2013    source источник


Ответы (1)


Теперь это поддерживается. Вы можете передать параметр запроса для привязки, который имеет значение backlog.

Вот пример того, как это сделать в приложении Rails.

# config/puma.rb
workers Integer(ENV['PUMA_WORKERS'] || 3)
threads Integer(ENV['MIN_THREADS']  || 1), Integer(ENV['MAX_THREADS'] || 16)

preload_app!

rackup      DefaultRackup

port = Integer(ENV['PORT'] || 3000)
backlog = Integer(ENV['PUMA_BACKLOG'] || 20)

bind "tcp://0.0.0.0:#{port}?backlog=#{backlog}"

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

on_worker_boot do
  # worker specific setup
  ActiveSupport.on_load(:active_record) do
    config = ActiveRecord::Base.configurations[Rails.env] ||
                Rails.application.config.database_configuration[Rails.env]
    config['pool'] = ENV['MAX_THREADS'] || 16
    ActiveRecord::Base.establish_connection(config)
  end
end 

Примечание. Убедитесь, что вы используете последнюю версию Puma. Я проверил, что это работает в 2.8.2.

Вот пример приложения, использующего эту конфигурацию, я протестировал его на Heroku.

Для получения дополнительной информации я добавил решение в свой блог здесь: http://mikecoutermarsh.com/adjusting-pumas-backlog-for-heroku/

person mscccc    schedule 12.07.2014