2

サイトをクロールするRubyスクリプトがあり、40分かかります。私がやりたいのは、結果をデータベースにダンプしてActiveRecord、データに対して通常の処理を実行できるようにすることです。

  1. Railsアプリに入れて、スクリプトを開始する「スタート」ボタンがある場合、タイムアウトになりますか?
  2. 理想的には、スクリプトを少なくとも1日に1回実行し、データベースを更新する必要があります。そのため、rakeタスクを作成するのが最善の策でしょうか、それとも他の方法がありますか?
  3. これをRailsアプリでラップする場合、どのフォルダーにスクリプトを配置する必要があり、それにアプローチするための最良の方法は何ですか?モデルファイルにドロップすることはできません-それは意味がないからです。
  4. 私はこれまで「ジョブ」タイプの処理を行ったことがありませんが、これはその範囲に含まれる可能性があるようです。これを行うとき、他にどのようなことを考慮する必要がありますか?

編集1:

もう1つの質問は、この特定のRubyスクリプトを自分の/libディレクトリに配置した場合、どのようにしてそれをDBと対話させるのかということです。私は通常、モデルとコントローラーからDBを操作します。実行後に結果をDBに保存するにはどうすればよいですか?

4

4 に答える 4

6

私はあなたにいくつかの簡単な答えを与えるようにします。

A)あなたはおそらくそれをバックグラウンドの仕事として置くでしょう。そのためのいくつかのまともな宝石があります。https://github.com/defunkt/resqueまたはhttps://github.com/tobi/delayed_jobなどのより軽量なものを検討してください。

B)rakeタスクで十分であり、前述のライブラリのいずれかで実行します。別のオプションはcronジョブです。

C)lib/ディレクトリに配置する必要があります。

D)潜在的なエラーを追跡するために、常に何らかの処理ログを利用できるようにする必要があります。上記の2つのライブラリのいずれかを選択する場合は、必ず説明を正しくお読みください。

于 2012-05-30T17:29:40.033 に答える
1

https://github.com/collectiveidea/delayed_job

于 2012-05-30T17:28:37.540 に答える
1

最も簡単なのは、ジョブをレーキタスクとして設定することです。次に、コマンドラインからrakeタスクをテストして、動作することを確認します。

最後に、rakeタスクをサーバー上のcronジョブとして追加し、結果のログを電子メールで送信します。

私のアプリには、いくつかのサブタスクを処理する「Nightly」レーキタスクがあります。さまざまなクリーンアップタスクを実行し、夜間レポートなどを実行します。

Delay Jobなどのジョブ処理システムは、1日1回のタイプのタスクにはおそらくやり過ぎでしょう。私のアプリも遅延ジョブを使用していますが、多くのクライアントが1日を通してタスクを開始しました。

遅延ジョブプロセスを監視するプロセスも必要であることを忘れないでください(必要に応じて再起動します)。私はrunitを使用していますが、他の選択肢もあります。

于 2012-05-30T17:37:17.097 に答える
1

gemを使用してcronジョブを実行します。

于 2012-05-30T17:41:30.880 に答える