使用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?,但它没有回答我的问题。
任何,线索或帮助赞赏。
答案 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