我一直试图想出几天的问题,但没有运气,我在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):
请提供任何帮助,谢谢。
答案 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
希望这有助于其他人。