2012-09-04 21 views
7

Tôi đã cố gắng để có được Resque (với Resque server) & RedisToGo làm việc trên Heroku (tuyết tùng) cho một lúc bây giờ, nhưng tôi tiếp tục chạy vào lỗi này:Resque, Resque Server, trên RedisToGo với Heroku

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

Làm việc tại địa phương và tôi có thể truy cập lại chỉ trong bảng điều khiển của Heroku cho ứng dụng của tôi.

My Procfile có:

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 có:

gem 'redis' 

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

lib/nhiệm vụ/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" 

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

sau đó trong thư mục app/công nhân của tôi, tôi có một cái gì đó giống như myjob.rb

Tôi cảm thấy như tôi' m đi vào vòng tròn ở đây, bất kỳ ý tưởng nào?

+0

Bạn có thể xác nhận rằng bạn đã cài đặt trình bổ sung RedisToGo hay không. Kiểm tra kết quả của 'cấu hình heroku' và đảm bảo bạn có mục nhập cho REDISTOGO_URL – Jonathan

+0

Bạn có nhận ra điều này không? Tôi đang gặp vấn đề tương tự. – Kohanz

Trả lời

8

Tôi nghĩ rằng Procfile của bạn có lỗi chính tả. Tại sao bạn có hai quy trình web? Tôi muốn gắn bó với một và sử dụng unicorn.

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

Khi sử dụng lân với resque, bạn phải xác định resqueredis kết nối mỗi lần lân dĩa. Dưới đây là các tệp có liên quan.

config/initializers/redis.rb

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

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

Xem số gist này để hoàn thành unicorn.rb

+0

Trong trường hợp này, có một trang web và một công nhân dyno?Và cấu hình này theo dõi địa chỉ IP của dyno của nhân viên? Tài khoản này có cho tất cả các thông tin liên lạc cần phải xảy ra mà không có dịch vụ khác ở giữa hai dịch vụ này không? – Dogweather

+0

@Dogweather Một trang web và một công nhân dyno. REDIS_WORKER là kết nối dyno Redis của nhân viên. Bạn không cần một dịch vụ khác. – simeonwillbanks

Các vấn đề liên quan