17

私は現在、RSS ソースから新しい情報を取得し、特定の頻度でそれらの RSS ソースを更新する必要があるアプリケーションを作成しています。現在、ユーザーがフィードを要求したときにのみプルしていますが、その動作を自動定期フェッチに変更したいと考えています。

データベースと対話し、cron を介して定期的に開始されるシェルスクリプトを作成していましたが、これは二重の労力がかかるため、これを行うための「Rails Way」または「Ruby Way」はどうなるのだろうと考えていました。Ubuntu、Apache、および Passenger を使用しています。アプリケーションに含まれている可能性のあるより良い方法を提案していただけますか?

4

6 に答える 6

19

rake タスクのようなものを実行し、everygem を使用しcron ジョブを生成し、rake タスクを実行することをお勧めします。

whenver gem の詳細については、http: //railscasts.com/episodes/164-cron-in-ruby を参照してください。

when gemの主な利点は、アプリケーションの要件 (つまり、アプリケーションで x 時間ごとに実行される cron ジョブ) をアプリケーション内に保持し、アプリケーションの移植性を高めることです。

于 2010-01-17T06:47:12.913 に答える
6

上記の2つの組み合わせをお勧めします。ダイレクト メソッドが既に作成されている場合でも、rake タスクが必要です。これは、cron で実行したいサーバー管理機能や、コマンド ラインから実行したい場合があるためです。これには、rake タスクが適しています。

私はそれを保証することはできませんが、いつでもプラグインはクールに聞こえます. もちろん、物事をゼロから行う方法を知っておいて、プラグインを使用して生活を楽にするのは良いことです。これがゼロからの方法です。

新しいファイルを作成し、lib/tasks/admin.rake

内部で、タスク自体を作成します。

namespace :admin
  desc "Updates all RSS feeds"
  task :rss => :environment do
    RssFeed.update_all
  end
end

これは、RssFeed クラスがあることを前提としており、update_all メソッドは期待どおりに機能します。コマンドラインからこれを呼び出すことができます:

rake admin:rss

これを cron に追加して ( crontab -lWeb ユーザーとして呼び出して)、次の行を追加できます。

10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss
于 2010-01-17T15:04:44.643 に答える
1

さまざまなソリューションがあります。script/runner最も簡単なセットアップでは、crontab で次のように使用できます。

10 0 * * * /home/myuser/myproject/script/runner -e production ModelName.methodname

Methodname は、モデルの静的メソッドである必要があります。プロジェクトをフル パスで参照する必要があります。そうしないと、cron 環境で見つからない可能性が高くなります。crontab慣れていない場合は、crontab 構文に関する情報をマニュアル ページで確認してください。たとえば、上記は毎日 0 時の 10 分 (要するに午前 12 時 10 分) にスクリプトを実行します。

より強力なソリューションが必要な場合は、BackgroundRBを使用できます。BackgroundRB はデーモンを実行し、スケジュールするタスクをサポートし、結果をデータベースに入れることができます。Web プロセスがタスクの完了を要求し、結果を取得する方法を許可する単純な通信プロトコルさえ備えています。これにより、「発生する」だけの crontab ではなく、Web インターフェイスから直接バックグラウンド ジョブを制御できます。

BackroundRB を機能させるには、もう少し多くのセットアップが必要ですが、ジョブを制御する必要がある場合は、それだけの価値があるかもしれません。

于 2010-01-17T06:38:32.330 に答える
0

小規模なチームや個人的なプロジェクトの場合、everything gem は最適です。しかし、会社に開発チームとは別の運用チームがある場合、それは理想的ではないかもしれません。

私の最後の仕事では、運用チームは、システムに副作用がないと確信できるように、インストールしている cron を確認できる必要がありました。そのため、DSL ソリューションは機能しませんでした。しかし、私たち (開発者) は、バージョン管理に cron スクリプトが必要でした。

したがって、妥協するために、次のような生の cron でテキスト ファイルをチェックしました。

10 0 * * * cd /path/to/rails/app && rake RAILS_ENV=production admin:rss

そして、デプロイの一部としてそれを crontab にインストールする capistrano スクリプトにステップを追加しました。

于 2010-01-18T04:29:17.227 に答える
0

サーバーで Webmin のセットアップを試してください。ホストされているサイトがそれを提供する場合。下記URLにアクセスしてください。セットアップが簡単で、使いやすいです。

URL は次のとおりです。

http://your_ip_address:10000/

多くのアプリケーションでこれを使用してきましたが、cron ジョブをスケジュールするのに役立ちました。

于 2013-03-25T14:56:23.753 に答える