2012-09-04 17 views
7

Ho cercato di ottenere Resque (con Resque server) & RedisToGo lavorare su Heroku (cedro) per un po 'adesso, ma io continuo a correre in questo errore:Resque, Resque Server, sulla RedisToGo con Heroku

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

Funziona localmente e posso accedere ai redis nella console di Heroku per la mia app.

mio Procfile ha:

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 

mio Gemfile ha:

gem 'redis' 

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

lib/task/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" 

inizializzatori: 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 } 

poi nella mia cartella app/lavoratori ho qualcosa di simile myjob.rb

Mi sento come se' sto andando in circolo qui, qualche idea?

+0

Puoi confermare che hai installato l'addon di RedisToGo. Controlla l'output di 'heroku config' e assicurati di avere una voce per REDISTOGO_URL – Jonathan

+0

Hai capito? Sto avendo lo stesso problema. – Kohanz

risposta

8

Penso che il tuo Procfile abbia un refuso. Perché hai due processi web? Ne mangerei con uno e utilizzare unicorno.

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

Quando si utilizza unicorno con resque, è necessario definire il resqueRedis connessione ogni volta unicorno forchette. Ecco i file rilevanti.

config/inizializzatori/redis.rb

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

config/inizializzatori/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 

Vedere questo gist per l'intero unicorn.rb

+0

In questo scenario, c'è un web e un addetto al lavoro?E questa configurazione tiene traccia dell'indirizzo IP del banco prova operaio? Sarà questo conto per tutte le comunicazioni che devono avvenire senza un altro servizio tra le due? – Dogweather

+0

@Dogweather Un web e un addetto al lavoro. REDIS_WORKER è la connessione Redazione operaio Dyno. Non hai bisogno di un altro servizio. – simeonwillbanks

Problemi correlati