2012-09-04 13 views
7

Próbowałem dostać Resque (z Resque serwera) & RedisToGo pracy na Heroku (cedr) na chwilę teraz, ale stale uruchomiony w ten błąd:Resque, Resque Server, na RedisToGo z Heroku

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

Działa lokalnie i mogę uzyskać dostęp do Redis w porządku w konsoli Heroku dla mojej aplikacji.

My Procfile posiada:

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 

My Gemfile posiada:

gem 'redis' 

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

lib/zadań/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" 

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

następnie w moim katalogu app/pracowników Mam coś myjob.rb

czuję, że” Mam tu w kółko jakieś pomysły?

+0

Czy możesz potwierdzić, że zainstalowałeś dodatek RedisToGo. Sprawdź wyjście 'heroku config' i upewnij się, że masz wpis dla REDISTOGO_URL – Jonathan

+0

Zrozumiałeś to? Mam ten sam problem. – Kohanz

Odpowiedz

8

Myślę, że Twój Procfile ma literówkę. Dlaczego masz dwa procesy: web? Trzymałem się jednego i używam jednorożca jednorożca.

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

Podczas korzystania jednorożec z Resque, trzeba zdefiniować ResqueRedis połączenia za każdym razem jednorożec widelce. Oto odpowiednie pliki.

konfiguracji/inicjalizatory/redis.rb

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

konfiguracji/inicjalizatory/resque.rb

Resque.redis = REDIS_WORKER 

konfiguracji/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 

Zapoznaj się z tym gist, aby uzyskać kompletną unicorn.rb

+0

W tym scenariuszu jest jeden dyżur sieciowy i jeden pracownik?A ta konfiguracja śledzi adres IP dyno pracownika? Czy to oznacza całą komunikację, która musi się odbyć bez innej usługi pomiędzy tymi dwoma? – Dogweather

+0

@Dogweather Jedna sieć i jeden dyno pracownika. REDIS_WORKER jest połączeniem typu robot-dyno Redis. Nie potrzebujesz innej usługi. – simeonwillbanks

Powiązane problemy