Heroku Cedar上的Resque无法正常工作

时间:2012-06-10 10:55:00

标签: ruby-on-rails ruby heroku redis resque

我一直试图想出几天的问题,但没有运气,我在Heroku Cedar上使用Unicorn运行Rails 3.1.3并使用Resque 1.20进行后台工作。

已添加的Redis加载项和REDISTOGO_URL设置,我有resque.rb初始化程序为

require 'resque'
Resque.after_fork = Proc.new { ActiveRecord::Base.establish_connection }

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

我也试过

Resque.redis = Redis.connect(:url => ENV['REDISTOGO_URL'])

此外,来自RedisToGo官方网站

ENV["REDISTOGO_URL"] ||= "redis://username:password@host:1234/"

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

Heroku工作者:

bundle exec rake resque:work QUEUE='*'

在本地和Heroku控制台中,一切正常;但是当我尝试从Rails排队时

Resque.enqueue(EmailQueue, id)

我得到了

NoMethodError (undefined method `sadd' for nil:NilClass):

请提供任何帮助,谢谢。

1 个答案:

答案 0 :(得分:2)

想出来,因为我在独角兽上;我必须将config / unicorn.rb设置为如下连接或Redis。

after_fork do |server, worker|
 # Replace with MongoDB or whatever
  if defined?(ActiveRecord::Base)
     ActiveRecord::Base.establish_connection
     Rails.logger.info('Connected to ActiveRecord')
  end

# If you are using Redis but not Resque, change this
 if defined?(Resque)
    Resque.redis = ENV['REDISTOGO_URL']
    Rails.logger.info('Connected to Redis')
 end
end

希望这有助于其他人。