2013-07-03 1 views
2

Я пытаюсь добавить рабочих Resque в приложение Heroku. Приложение отлично работает в моей среде разработки, но когда я развернуть на Heroku и попытаться очереди на работу, я получаю следующее:Как исправить Redis :: InheritedError - «Попробовал использовать соединение из дочернего процесса без повторного подключения».

Redis::InheritedError Error 
Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking. 

Я добавил RedisToGo в приложение, и я два раза проверил это the Redis URL is being given to Resque. То есть, /config/initializers/redis.rb выглядит следующим образом:

uri = URI.parse(ENV["REDISTOGO_URL"] || "redis://localhost:6379/") 
REDIS = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password) 
Resque.redis = REDIS 

Кто-нибудь знает, что я могу делать неправильно?

ответ

0

когда я задал этот вопрос, я пытался запускать мои Resque рабочих на отдельный дирижер Heroku. В конце концов, я отказался от этого подхода и попытался запустить их в том же самом динамике, что и мой веб-сервер, используя Unicorn. Я следил за инструкциями по настройке here и все работало нормально.

1

@ dB` Там 2 способа вы можете сделать это

а) Обновление Resque Я предполагаю, что решить эту проблему, так как они внутренне делают чек повторного подключения this и this

Теперь вышеупомянутая проблема является потому, что ваша работа в основном является дочерним процессом, а дочерний процесс наследует все открытое соединение от родителя здесь (redis connection), а теперь, когда ваша работа завершает работу, закройте все открытое соединение, даже переиздайте соединение, которое разделяет ваш рабочий, следовательно, указанная выше ошибка

результат даст второе решение Если у вас нет обновления, помните, что возможно решение ниже будет работать

b) Попытка создать новое соединение/повторное подключение существующего соединения redis в рескейных крючках после/перед вилкой, которые когда-либо были выполнены вы бы помочь Я считаю

Таким образом, соединение Redis не уйдет, даже если дочерний процесс существует

Надежда эта помощь

+0

Большое спасибо за ответ Viren. В конце концов я пошел с другим решением, но я очень ценю ваше объяснение. –