rails ruby-on-rails postgresql concurrency sidekiq

ruby-on-rails - sidekiq rails 5



Sidekiq: no se pudo obtener una conexión de base de datos en 5.000 segundos (2)

Configuré el conjunto de bases de datos para la concurrencia de sidekiq y ahora funciona para mí.

bundle exec sidekiq -c 10

en mi database.yml

development: adapter: postgresql ... host: localhost pool: 10

Recibo la siguiente advertencia con Rails 4 y Sidekiq en os x en desarrollo

10:13:39 worker.1 | 2014-09-22T07:13:39.857Z 86981 TID-oug0oog10 WARN: could not obtain a database connection within 5.000 seconds (waited 5.002 seconds) 10:13:39 worker.1 | 2014-09-22T07:13:39.857Z 86981 TID-oug0oog10 WARN: /Users/me/.rvm/gems/ruby-2.1.3/gems/activerecord-4.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in `block in wait_poll''

Leí otras respuestas que dicen para reducir la concurrencia que le doy a sidekiq para permitir más para otras cosas, pero con

worker: bundle exec sidekiq -c 10

todavía no funciona

Estoy usando Postgres.app

¿Qué deben ser los números / concurrencia en localhost?


El problema está relacionado con el hecho de que la base de datos debe ser ''sidekiq_concurrency'' + 2. Si coloca esto en su inicializador de sidekiq, resolverá el problema en general:

Sidekiq.configure_server do |config| config = ActiveRecord::Base.configurations[Rails.env] || Rails.application.config.database_configuration[Rails.env] config[''pool''] = Sidekiq.options[:concurrency] + 2 ActiveRecord::Base.establish_connection(config) Rails.logger.debug("Connection Pool size for Sidekiq Server is now: #{ActiveRecord::Base.connection.pool.instance_variable_get(''@size'')}") end