我在开发中的os x上使用Rails 4和Sidekiq获得以下警告
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'
我读了其他的答案,说减少我给sidekiq的并发性以允许更多其他东西,但是
worker: bundle exec sidekiq -c 10
它仍然不起作用
我正在使用Postgres.app
localhost中的数字/并发应该是什么?
答案 0 :(得分:34)
我将数据库池设置为sidekiq并发,现在它适用于我。
bundle exec sidekiq -c 10
在我的database.yml
中development:
adapter: postgresql
...
host: localhost
pool: 10
答案 1 :(得分:3)
probem与数据库池应该是'sidekiq_concurrency'+ 2这一事实有关。如果你将它放入你的sidekiq初始化程序中,你将解决这个问题:
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
答案 2 :(得分:0)
如果使用rails <5.2,则数据库连接大小应为加一并发。这是相应的GitHub问题。 https://github.com/mperham/sidekiq/issues/4252
如果有5个线程,则在<5.2版本的rails中数据库池大小应为6