2016-08-22 72 views
2

我已經構建了我自己的作業服務器,它本質上是一個私有gem,作爲圍繞resque的包裝而構建。無Rakefile運行resque

(我不是在Rails環境中運行這個)

我到處看,它似乎是一個記錄/推薦的方式開始了工人,是這樣的:

$ QUEUE=* rake resque:work 

哪意味着它必須在Rakefile存在的文件夾中執行。

我正在尋找一種方法來啓動它沒有Rakefile。

我已經學會爲止:

  • 我已經通過issues看,也許有人問過類似的問題。
  • 我已經瀏覽了wiki,特別是FAQ
  • 我知道我可以通過分析tasks file創建我自己的「bin」來運行它,而不用耙子。
  • 我看到resque安裝了一個resque二進制文件,但它似乎只提供有限的功能,例如刪除和列出工作人員,但沒有啓動。
  • 我目前的解決方法是,我的寶石的二進制文件在運行之前(和該文件夾有一個Rakefile)在做gem的文件夾chdir,就像下面的代碼一樣。

def start_worker 
    ENV['QUEUE'] = '*' 
    Dir.chdir gemdir do 
    exec "rake resque:work" 
    end 
end 

def gemdir 
    File.expand_path "../../", __dir__ 
end 

欣賞在正確的方向上的任何輕推。

回答

0

目前的解決方案我已經做了這個:

def start_worker 
    interval = 5 
    queue = '*' 

    ENV['QUEUE'] = queue 
    worker = Resque::Worker.new 
    Resque.logger = Logger.new STDOUT 
    Resque.logger.level = Logger::INFO 

    ## this is not yet implemented in 1.26.0, keeping here as a reminder 
    # worker.prepare 

    worker.log "Starting worker" 
    worker.work interval 
end 

哪家的code from the rake task

作爲參考的適應,我也開了github issue,在起飛的機會,別人也需要這樣的功能。

0

我已經創建了一個腳本來使用下面的工人啓動API創建惡魔工作進程。

def start_worker(id) 
    ENV['QUEUE'] = @queues || "*" 
    ENV['PIDFILE'] = pid_file(id) 
    ENV['JOBS_PER_FORK'] = @jobs_per_fork || "1000" 
    ENV['BACKGROUND'] = 'true' 
    ENV['TERM_CHILD'] = 'true' 
    @debug ? ENV['VVERBOSE'] = 'true' : ENV['VERBOSE'] = 'true' 

    begin 
    worker = Resque::Worker.new 
    rescue Resque::NoQueueError 
    Resque.logger.error "No queue is set for worker_id = #{id}" 
    end 

    worker.prepare 
    worker.log "Starting worker #{self}" 
    worker.work(5) # interval, will block 
end