8

Resque (Resque サーバーを使用) と RedisToGo を heroku (cedar) でしばらく動作させようとしてきましたが、このエラーが発生し続けています。

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

ローカルで動作しており、アプリの Heroku コンソールで redis に問題なくアクセスできます。

私のProfileには次のものがあります:

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

私のGemfileには次のものがあります:

gem 'redis'

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

lib/タスク/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"

ルート.rb:

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

初期化子: 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 }

次に、私の app/workers ディレクトリに myjob.rb のようなものがあります

私はここでぐるぐる回っているように感じます。何かアイデアはありますか?

4

1 に答える 1

9

Procfileタイプミスがあると思います。なぜ2つのwebプロセスがあるのですか?私は 1 つに固執し、unicornを使用します。

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

resqueでunicornを使用する場合、ユニコーンがフォークするたびにresque redis接続を定義する必要があります。関連するファイルは次のとおりです。

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

完全なunicorn.rbについては、この要点を参照してください。

于 2013-01-31T22:05:29.803 に答える