2011-08-29 33 views
2

使用resque,我想指定一個命名空間,並能夠看到,工人們在resque的Web如何開始resque以使用Resque.redis.namespace?

的resque rake任務開始時是這樣的:

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

命名空間的配置/初始化指定/resque.rb

Resque.redis.namespace = "resque:myapp" 

在UI上的Resque-web顯示正確的命名空間,但0個工作人員可見。

如果我沒有指定任何名稱空間,一切工作正常。

問了一個非常類似的問題。 How do you configure resque-web to use Resque.redis.namespace?,但它不回答我的問題。

任何線索或幫助表示讚賞。

回答

2

加載Resque worker時不需要設置RESQUE_NAMESPACE,因爲它會使用Resque.redis.namespace指令加載您的Rails應用程序。

當開始resque-web,你應該使用-N PARAM:

resque-web -N myapp 

它應該只是罰款。

P.S .:我對命名空間上的冒號沒有信心,請不要使用它。

+0

在測試此,似乎命名空間必須是公正'「的myapp」'在'config/initializers/resque.rb'匹配'-N myapp'進行resque-web。 resque會在命名空間之後添加':resque:'到它的鍵。 – jwadsack

+0

這也適用於我。我設置了我的resque初始化器像這樣 'Resque.redis.namespace =:ts' 然後啓動我的resque-web,像jmonteiro&jwadsa​​ck建議用'-N ts' –

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 =之前。

同時一定要設置這個在任何after_fork回調爲您的Web服務器(麒麟/ PUMA /等):

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