0

RSS フィードの配列を Rails の Posts テーブルに定期的にインポートしようとしています。私は今のところCronを避けようとしています。これが私がこれまでに持っているものです(アプリケーションコントローラー内)。

require 'rubygems'
require 'rufus/scheduler'
require 'feedzirra'
scheduler = Rufus::Scheduler.start_new
scheduler.every '60m' do
  @users = User.all(:joins => :roles, :conditions => {:roles => {:name => "writer"}})
  @users.each do |user|
    if user.feed.blank? 

    else
      FEEDZIRRA IMPORT CODE??
    end
  end

おそらく結論付けたように、RSS フィードの配列は、Feed フィールドを設定したライターの役割を持つユーザーからのものです。スクリプトは 60 分ごとに実行されます。

私の質問は、以前にインポートした投稿を再インポートせずにフィードをインポートする方法です? そして、私はプログラミングに不慣れで、これを単なる学習曲線プロジェクトとして行っているので、コードをより効果的にすることについて建設的な批判があれば、私はすべて耳を傾けます.

編集:考え直して、これが私のアプリケーションコントローラーにあるのは適切ですか? ページが読み込まれるたびに、このスケジューラの新しいインスタンスが作成されますよね? 私がそれで正しければ、このコードをどこに安全に置くことができますか?

4

2 に答える 2

1

2 番目の質問に答えるには: いいえ、これはコントローラーで実行しないでください。スケジュールされたタスクを作成するための一般的な gem がいくつかあります。「いつでも」をお勧めします:

https://github.com/javan/whenever

それらには優れたドキュメントがあり、従うのはかなり簡単です。タスクは、アプリケーション コントローラーの代わりに config/schedule.rb ファイルで指定されます。

于 2012-08-19T22:01:49.540 に答える
0

以前にインポートしたフィードのインポートを回避するために考えられることは、データベースにフィールドを作成することです。たとえば、「id_unique」などです。各フィードの定数変数をこのフィールドに追加します。たとえば、RSS フィードの日付/時刻などです。モデルで id_unique の validates_uniqueness_of を検証するか、id_unique による find_or_create メソッドを追加することができます。

于 2012-08-19T22:46:15.420 に答える