2013-07-23 6 views
5

私はSideksを使用して、Rails 3.2アプリケーションでユーザーアクションによって開始されるバックグラウンドジョブを正常に実行しています。私の特定のアプリケーションは、第三者のAPIを介して外部ソースからデータを送受信することを含みます。Sidekiqで連続バックグラウンドジョブを実行するにはどうしたらいいですか?

ダウンロード可能なデータがあるかどうかを各ユーザーごとに確認し続けることで、この外部ソースと同期させておく必要があります。

ここまでの私のバックグラウンドジョブはすべて、私が上記のようにユーザーによって開始されました。私は継続的に私が想像whileループ内で、各ユーザの外部データの存在を確認したい場合は私の質問は、次のとおりです。

# pseudocode 
while true 

    for user in User.active 
    data = user.get_data 
    next if data.blank? 

    UserDataWorker.perform_async(user.id) 

    end 
end 

その後、私は上記のコードを置けばいいのどこ?私は、連続的な仕事を生み出す方法を混乱させる。私はサイドキックの作業員にコードを書いてはいけません。それは決して完了しない仕事に過ぎないからです。それとも私はそれをするべきですか?

私はレーキタスクに入れたくありません。レーキタスクをどのように監視するのでしょうか?私がSidekqについて読んだことは、有限であり、完了したり、エラーを出したりすることができる作業を実行している作業者を指しているようです。私はあなたが提供できるどんな助けにも感謝します。

+0

どのようにcronジョブを使用していますか? – mkk

+0

私はそれについて考えましたが、cronはよりタスク指向であり、私が探しているのはデーモンのようなものです。 – AKWF

答えて

3

Rubyのマルチスレッド化はそのためのものです。

Thread.new do 

    while true 

    for user in User.active 
     data = user.get_data 
     next if data.blank? 

     UserDataWorker.perform_async(user.id) 
    end 
    sleep 1 

    end 
end 

あなたの小切手に多額のリソースが必要ない場合は、大丈夫です。

関連する問題