2012-03-13 9 views
12

私はバックグラウンドでスクリプトを実行する最良の方法を見つけようとしています。私は周りを見回していて、たくさんのオプションを見つけましたが、多くの/ほとんどはここ数年で非アクティブになっているようです。私のニーズを説明しましょう。ベスト現在のレールバックグラウンドタスクメソッド?

railsアプリは、基本的に、これらのスクリプトをいつ、どのように実行するかを設定するためのフロントエンドです。スクリプトが実行され、レポートが生成され、電子メールアラートが送信されます。したがって、ユーザーは開始時刻と、これらのスクリプトが動的に実行される頻度を設定できる必要があります。結果のレポートをDBに保存するには、スクリプト自身がレール環境にアクセスできる必要があります。

無数のオプションの中から最良の方法を見つけようとしています。

+0

アクティブなジョブはどうですか?私はちょうどそれについて読むが有望に見える。 – akostadinov

答えて

12

私はバックグラウンドジョブキューイングシステムを探していると思います。

resqueまたはdelayed_jobのいずれかを探しています。どちらも将来のスケジューリングタスクをサポートしています - delayed_jobはこれをネイティブに行いますが、resqueにはresque_schedulerというプラグインがあります。

指定したパラメータでバックグラウンドでジョブをエンキューし、選択した時点で実行されます。ジョブを無期限または一定回数繰り返すように設定できます(少なくともresque-schedulerでは、delayed_jobについてはわかりません)。

delayed_jobはすべてをデータベースに保存するため、セットアップが簡単です。 resqueはより堅牢ですが、スタックにredisを持たせる必要があります。しかし、もしあなたが既にそうしているのであれば、あなたの問題には理想的な解決策です。

6

いつでもhttps://github.com/javan/wheneverに宝石を見てください。

cronジョブのようなタスクをスケジュールすることができます。

Linuxでうまく動作し、最後のコミットは14日前です。私の友人はプロジェクトでそれを使用し、それにかなり満足していました。

編集:gem delayed_jobもご覧ください。長いタスクをバックグラウンドで実行するのに適しています。他のタスクを開始するためだけにcronジョブを作成する場合に便利です。

+0

これを見ましたが、正確に使用する方法を理解していない可能性があります。静的にschedule.rbファイルにタスクを作成するようです。だから私は実行時に私の仕事を変更することができますか?基本的に、私はこれが欲しいですが、私のレールアプリからユーザーが設定できるようにしたいと思います。 –

+0

単純な解決策は、ユーザーのスケジュールされたジョブの最小期間について考えることです。すべての保留中のジョブを1時間ごとに実行すれば十分ですが、毎時または10分ごとに1つのcronジョブを実行し、保留中のジョブのリストを繰り返して、実行するジョブを実行できます。それは、 "メタプログラミングで" crontabなどを作成しようとするよりもずっと簡単です。それは事実ではない場合は、まあ、幸運:) – Castilho

12

私は最近Sidekiqについて学びました。それは本当に素晴らしいと思います。

また、RailsCastについて - Sidekiqがあります。

関連する問題