2013-09-14 2 views
0

Я запускаю приложение на героку. Веб-работник разработан в рамках Grape.Resque потерять соединение с redis on heroku

Как винограда не имеет ничего подобного конфигурационными/инициализаторах, Я бегу код, как это перед каждым выходом на Resque:

HEROKU_REDIS_URL = "redis://redistogo:[email protected]:9990/" 
uri = URI.parse(HEROKU_REDIS_URL) 
Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password, :thread_safe => false) 

Через некоторое время рабочий Resque прекращает подбирая работу с Redis, хотя некоторые из них поставлены в очередь. При работе на местном уровне все работает нормально.

Любая идея, что я делаю неправильно? Или где я должен поставить инициализацию Resis Redis?

+0

Resque version please :) – Viren

+0

It's Resque 1.24.1, Redis 3.0.4 – pcv

ответ

0

Итак, после нескольких часов отладки я заработал. Позвольте мне поделиться тем, что части были неправильно в моей установке:

  • : thread_safe => истинный: экземпляр Redis должен быть создан как нить безопасной. Не уверен, что это означает в этом контексте, ничего не нашли в исходном коде Redis, но это то, что они предлагают в: http://redistogo.com/documentation/resque
  • Убедитесь, что redis назначен Resque только один раз для веб-сервера и рабочего процесса: Я закончил с кодом, как это:

    require 'resque' 
        if ENV["REDIS_SERVICE"] 
        begin 
         Resque.redis.get('abc') 
        rescue Redis::CannotConnectError 
         HEROKU_REDIS_URL = "redis://redistogo:[email protected]:9990/" 
    
         uri = URI.parse(HEROKU_REDIS_URL) 
         Resque.redis = Redis.new(
         :host => uri.host, 
         :port => uri.port, 
         :password => uri.password) 
    
        end 
        end 
    

    я поместил его в приложение/resque_redis_init.rb и требуется как в веб-приложения и рабочий Rakefile в resque:setup задачи

  • Убедитесь, что ничто использует тот же Redis server: Я узнал, что у работника в другом приложении heroku этот redis настроен для resque и продолжает есть задания из очереди. Рабочий был неправильно сконфигурирован, и работа была просто неудачной, если бы я не заметил этого.
  • Убедитесь, что в вашем Redis нет мусора.: мне пришлось очистить все содержимое Redis, чтобы убедиться, что нет зарегистрированных рабочих.
  • Убедитесь, что вы в очереди заданий в нужных очередях и что они имеют право приоритета Для меня это была следующая установка в PROCFILE

    resque: TERM_CHILD=1 VERBOSE=1 QUEUES=activity,polling bundle exec rake jobs:work 
    

Такая установка работает красиво. Надеюсь, что это поможет кому-то, так как там не так много документов для приложений, отличных от rails.

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

  • Нет связанных вопросов^_^