0

いつでも宝石がインストールされます。あらゆる種類の cron と、分、時間、日などでタスクをスケジュールするためのチュートリアルが表示されます。cron / whenで railscast ビデオを見ました。しかし、rake タスク以外に、ジョブ自体を作成する方法の例をまだ見つけていません。

データベースの変更をチェックするタスクをスケジュールしたいと考えています。データベースには、どの特定の行が変更されたかを示すタグが付けられるという考えです。データベースを定期的にポーリングして、これらの変更を確認する必要があります。次に、うまくいけば、プッシュするか、ajax を使用してページを動的に更新する必要があることをクライアントに知らせます。これを手動で行う場合は、次のようなコマンドを使用します。

 rails dbconsole
 select blah from blah;

いつでもmysqlコマンドを書く方法はありますか? これは、データベースに変更をポーリングするための正しい/最良の方法ですか? mysql 自体からデータベースをポーリングする方法があることは知っていますが、レール側から行うように具体的に指示されています。

私はこれらすべてのテクノロジー (Rails、データベース、ajax) の初心者なので、答えがはっきりしないのはおそらくそのためです。

クライアント側には、jquery を使用して行データを追加/削除/変更するボタンがあります。これは、データベースからデータを取得できるようになったら、テーブル内のものを変更する方法を確実に把握できるようにするためです。これらのボタンは最終的に削除されます。

現在、ページは ajax を使用して html テーブル全体を更新しています。しかし、彼らは ajax による行の更新/更新だけを望んでいます。

4

1 に答える 1

2

RailsCast の cron/wheneverをもう一度見てください。次のようなコード行の例に気付くでしょう。

runner "MyModel.some_process"

文字列内のコードが評価され、実行されます。したがって、いつでも実行したいものは何でも、そのコードを自分で書き、それを呼び出す方法を用意してください。

したがって、 という名前のクラスを作成し、DatabaseWatcherそれを という名前のクラス レベル メソッドを持つ lib に保存する.run場合は、次のようにします。

runner "DatabaseWatcher.run"

以上です。.run メソッドは、ロジックを配置する場所です。そのコードを実際に記述する方法については、要件によって異なります。updated_at時間が今から 1 分以内かどうかを探していますか? DB を最後にチェックした時刻を保存し、そのupdated_at時刻がそれより大きいかどうかを確認できますか? モデルが変更されるたびに格納するテーブルはありますか? それはすべてあなた次第です。

于 2013-06-24T15:59:55.603 に答える