2015-12-29 4 views
1

У меня есть простое и бесплатное приложение heroku, где я добавил redis/sidekiq, чтобы отправить почту в фоновом режиме. Я установил все и как только я начинаю рабочий, я получаю следующее сообщение об ошибке в цикле:Работник Heroku бросает ошибки при активации?

Error fetching job: ERR max number of clients reached 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:114:in `call' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:95:in `block in connect' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:280:in `with_reconnect' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:93:in `connect' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:351:in `ensure_connected' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:208:in `block in process' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:293:in `logging' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:207:in `process' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:113:in `call' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:196:in `block in call_with_timeout' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:267:in `with_socket_timeout' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis/client.rb:195:in `call_with_timeout' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis.rb:1097:in `block in _bpop' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis.rb:57:in `block in synchronize' 
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis.rb:57:in `synchronize' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis.rb:1094:in `_bpop' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-3.2.2/lib/redis.rb:1139:in `brpop' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-namespace-1.5.2/lib/redis/namespace.rb:393:in `call_with_namespace' 
/app/vendor/bundle/ruby/2.2.0/gems/redis-namespace-1.5.2/lib/redis/namespace.rb:290:in `method_missing' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/fetch.rb:35:in `block in retrieve_work' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq.rb:84:in `block in redis' 
/app/vendor/bundle/ruby/2.2.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:64:in `block (2 levels) in with' 
/app/vendor/bundle/ruby/2.2.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:63:in `handle_interrupt' 
/app/vendor/bundle/ruby/2.2.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:63:in `block in with' 
/app/vendor/bundle/ruby/2.2.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:60:in `handle_interrupt' 
/app/vendor/bundle/ruby/2.2.0/gems/connection_pool-2.2.0/lib/connection_pool.rb:60:in `with' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq.rb:81:in `redis' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/fetch.rb:35:in `retrieve_work' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:85:in `get_one' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:95:in `fetch' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:78:in `process_one' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:67:in `run' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/util.rb:16:in `watchdog' 
/app/vendor/bundle/ruby/2.2.0/gems/sidekiq-4.0.1/lib/sidekiq/util.rb:24:in `block in safe_thread' 

sidekiq.yml:

--- 
:queues: 
    - default 
    - mailers 

sidekiq.rb:

Sidekiq.configure_server do |config| 
    config.redis = { :namespace => "mynamespace" } 
end 

Sidekiq.configure_client do |config| 
    config.redis = { :namespace => "mynamespace" } 
end 

require "sidekiq/web" 
Sidekiq::Web.app_url = "/" 
Sidekiq::Web.use(Rack::Auth::Basic, "Application") do |username, password| 
    username == ENV.fetch("SIDEKIQ_WEB_USERNAME") && 
    password == ENV.fetch("SIDEKIQ_WEB_PASSWORD") 
end 

Любой идея, что здесь не так? Если вам нужна дополнительная информация о файлах конфигурации или что-то еще, дайте мне знать.

+0

Вы поразили максимальное количество подключений Redis, разрешенных вашим планом: https://addons.heroku.com/redistogo –

+0

Да, но как я могу не остановить это? 'concurrency', похоже, не повлиял. – Cojones

ответ

0

Изменение sidekiq.yml к

--- 
:queues: 
    - default 
    - mailers 
:concurrency: 5 

сделал трюк. Установка concurrency на 9 не по какой-то причине, даже несмотря на то, что героин позволяет 10 для redis nano addon.

1

Это было лучшее решение, которое я нашел. Если вы используете бесплатный план героя и бесплатный план redis nano. Все соединения должны содержать до 10 или меньше. Чтобы убедиться, что соединения добавлены, просмотрите этот пост в блоге. http://manuelvanrijn.nl/blog/2012/11/13/sidekiq-on-heroku-with-redistogo-nano/

Он объясняет, как все складывается.

У писателя также есть калькулятор, который поможет рассчитать, какая конфигурация должна быть для вашего конкретного сервера, sidekiq и т. Д. Он также сообщает вам, где должна быть добавлена ​​информация. Я тоже застрял на этом, надеюсь, что это сэкономит некоторое время :)

Смежные вопросы