2016-08-22 4 views
2

私自身のジョブサーバは、本来プライベートな宝石であり、resqueのラッパーとして構築されています。 Rakefileを使わずにresqueを実行する

私が見てどこ

(私はRailsの環境でこれを実行していないのですが)、それはこのようなものであり、労働者を起動するための文書化/推奨される方法のように思える:

$ QUEUE=* rake resque:work 

どのRakefileが存在するフォルダ内で実行されなければならないことを意味します。

私はRakefileなしで起動する方法を探しています。私がこれまで学んできた何

:私はissuesを通して見ている

  • 、多分誰かが同様の質問をしました。
  • 私はwiki、特にFAQを見ました。
  • tasks fileを分析すると、私は自分自身の "ビン"をレーキなしで実行することができます。
  • 私はresqueがresqueバイナリをインストールするのを見ましたが、作業者の削除と一覧表示のように限られた機能しか提供していないようですが、起動しません。
  • 私の宝石のバイナリは、以下のコードのように実行前にgemのフォルダにchdirを実行しています(このフォルダにはRakefileがあります)。

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 
関連する問題