如何启动resque以使用Resque.redis.namespace?

时间:2011-08-29 22:09:30

标签: ruby-on-rails resque

使用resque,我想指定一个命名空间,并能够在resque-web中看到工作者

resque rake任务以这种方式启动:

COUNT=5 QUEUE=* RESQUE_NAMESPACE="resque:myapp" rake environment resque:workers

命名空间在config / initializers / resque.rb中指定

Resque.redis.namespace = "resque:myapp"

在UI上使用Resque-web显示正确的命名空间,但可以看到0个工作者。

如果我没有指定任何命名空间,一切正常。

有人问过一个非常类似的问题。 How do you configure resque-web to use Resque.redis.namespace?,但它没有回答我的问题。

任何,线索或帮助赞赏。

2 个答案:

答案 0 :(得分:2)

加载Resque worker时不需要设置RESQUE_NAMESPACE,因为它会使用Resque.redis.namespace指令加载Rails应用程序。

启动resque-web时,您应该使用-N参数:

  resque-web -N myapp

它应该可以正常工作。

P.S。:我对命名空间中的冒号没有信心,请不要使用它。

答案 1 :(得分:0)

确保在设置redis

后进行设置
ENV["OPENREDIS_URL"] ||= "redis://127.0.0.1:6379"
uri = URI.parse(ENV["OPENREDIS_URL"])

Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
Rails.logger.info('Connected to Redis')
RESQUE_NAMESPACE = :my_namespace
Resque.redis.namespace = RESQUE_NAMESPACE

如果您尝试在Resque.redis.namespace =之前设置Resque.redis =,则会覆盖它。

还要确保在您的网络服务器(unicorn / puma / etc)的任何after_fork回调中设置此项:

on_worker_boot do
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
    Rails.logger.info('Connected to ActiveRecord')
  end

  if defined?(Resque)
    ENV["OPENREDIS_URL"] ||= "redis://127.0.0.1:6379"
    uri = URI.parse(ENV["OPENREDIS_URL"])
    Resque.redis = Redis.new(:host => uri.host, :port => uri.port, :password => uri.password)
    Resque.redis.namespace = RESQUE_NAMESPACE
    Rails.logger.info('Connected to Redis')
  end
end