2012-09-04 17 views
7

que he estado tratando de conseguir Resque (con Resque servidor) & RedisToGo trabajando en heroku (cedro) por un tiempo ahora, pero sigo corriendo en este error:Resque, Resque Server, en RedisToGo con Heroku

Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (ECONNREFUSED)): 

Está funcionando localmente, y puedo acceder a redis muy bien en la consola de Heroku para mi aplicación.

Mi Procfile tiene:

web: bundle exec thin start -p $PORT -e $RACK_ENV 
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb 
resque: env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake resque:work 

Mi Gemfile tiene:

gem 'redis' 

#Background queue 
gem 'resque', '~> 1.22.0', :require => "resque/server" 

lib/tareas/resque.rake:

require 'resque/tasks' 

task "resque:setup" => :environment do 
    ENV['QUEUE'] = '*' 
end 

desc "Alias for resque:work (To run workers on Heroku)" 
task "jobs:work" => "resque:work" 

routes.rb:

mount Resque::Server.new, :at => "/resque" 

inicializadores: redis.rb:

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

resque.rb:

Dir["#{Rails.root}/app/workers/*.rb"].each { |file| require file } 
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection } 

entonces en mi directorio app/trabajadores tengo algo así como myjob.rb

me siento como I' Estoy yendo en círculos aquí, ¿alguna idea?

+0

Puede confirmar que instaló el complemento RedisToGo. Verifique la salida de 'heroku config' y asegúrese de tener una entrada para REDISTOGO_URL – Jonathan

+0

¿Ha resuelto esto? Estoy teniendo el mismo problema. – Kohanz

Respuesta

8

Creo que tu Procfile tiene un error tipográfico. ¿Por qué tienes dos procesos web? Me quedaría con uno y usar unicornio.

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

Al utilizar unicornio con resque, usted tiene que definir el resqueRedis conexión cada vez unicornio horquillas. Aquí están los archivos relevantes.

config/inicializadores/redis.rb

uri = URI.parse(ENV["REDIS_WORKER"]) 
REDIS_WORKER = Redis.new(host: uri.host, port: uri.port, password: uri.password) 

config/inicializadores/resque.rb

Resque.redis = REDIS_WORKER 

config/unicorn.rb

before_fork do |server, worker| 
    if defined?(Resque) 
    Resque.redis.quit 
    Rails.logger.info("Disconnected from Redis") 
    end 
end 

after_fork do |server, worker| 
    if defined?(Resque) 
    Resque.redis = REDIS_WORKER 
    Rails.logger.info("Connected to Redis") 
    end 
end 

Consulte esto gist para el completo unicorn.rb

+0

En este escenario, ¿hay un dinamómetro web y un trabajador?¿Y esta configuración rastrea la dirección IP del banco de trabajadores? ¿Esto explicará toda la comunicación que debe suceder sin otro servicio entre los dos? – Dogweather

+0

@Dogweather One web y un trabajador dyno. REDIS_WORKER es la conexión de dyne Redis de trabajador. No necesitas otro servicio. – simeonwillbanks

Cuestiones relacionadas