0

几天来我一直试图弄清楚问题出在哪里,但没有运气,我正在使用 Unicorn 在 Heroku Cedar 上运行 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):

请任何帮助将不胜感激,谢谢。

4

1 回答 1

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

希望这对其他人有帮助。

于 2012-06-11T00:18:13.403 回答