Я прочитал следующий пост:
Настройка Sidekiq: concurrency на Heroku Как настроить соединения Redis с Rails 4, Puma и Sidekiq?
Однако я до сих пор не могу решить следующее...
Я сталкиваюсь с сообщением об ошибке в своих промежуточных и производственных развертываниях и считаю, что мне нужно изменить мои настройки ниже, но не уверен в оптимальной настройке.
Я использую worker sidekick/redis для отправки почты по формам регистрации/сброса пароля/свяжитесь с нами, а также для отправки журналов в Sentry (регистрация ошибок).
Исключение
Redis::CommandError: ERR достигнуто максимальное количество клиентов ' redis (4.2.2) lib/redis/client.rb:381:in `ensure_connected' ... (29 дополнительных кадров не отображались)
Сообщение
ERR достигнуто максимальное количество клиентов
Я использую Heroku, и мой Redis допускает 30 подключений, моя база данных имеет ограничение на количество подключений 20. У меня есть один веб-дино и один рабочий дино.
Мои производственные и промежуточные развертывания имеют отдельные базы данных/redis.
приятель.yml
production:
:concurrency: 17
staging:
:concurrency: 10
пума.rb
workers Integer(ENV['WEB_CONCURRENCY'] || 2)
max_threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
min_threads_count = Integer(ENV['RAILS_MIN_THREADS'] || max_threads_count)
threads min_threads_count, max_threads_count
preload_app!
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
before_fork do
puts "Puma master process about to fork. Closing existing Active record connections."
ActiveRecord::Base.connection.disconnect!
end
on_worker_boot do
ActiveRecord::Base.establish_connection
end
plugin :tmp_restart
сентриджоб.рб
class SentryJob < ApplicationJob
queue_as :default
def perform(event)
Raven.send_event(event)
end
end
база данных.yml
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV["DB_POOL"] || ENV['RAILS_MAX_THREADS'] || 5 %>