2013-05-17 54 views
0

我有兩個模型公司和新聞 如何使新聞每30分鐘下載一次? 我已經通過寶石「只要」嘗試,什麼都不會發生如何讓新聞每30分鐘下載一次?

class Company < ActiveRecord::Base 
    after_save :load_news 

    def load_news 
    last_entry = self.news.last 
    if last_entry.nil? 
     feed = Feedzirra::Feed.fetch_and_parse(self.url) 
    else 
     feed = Feedzirra::Feed.fetch_and_parse(self.url, 
     :if_modified_since => last_entry.published_at.to_time) 
    end 

    Company.add_entries(feed.entries, self.id) 
    end 

    def self.update_all_feeds(urls) 
    Feedzirra::Feed.fetch_and_parse(urls, 
     :on_success => lambda { |url, feed| 
     rss = Comapny.select("companies.id").where(:url => url).first 
     Company.add_entries(feed.entries, rss.id) 
     } 
    ) 
    end 

end 

class News < ActiveRecord::Base 
    attr_accessible :content, :guid, :name, :published_at, :summary, :url, :company_id 
end 
+0

隨着一個名爲新聞類,我希望你有東西在你的初始化,以避免單一新聞項目簡稱爲「新」。這只是乞求與紅寶石的'新'方法衝突。我會將其重命名爲NewsItem或其他類似的。除此之外,你的每個配置究竟是什麼樣的?這項工作是否出現在您的cron工作中?對於每30分鐘進行一次背景提取,這並不是一個好方法。 – sockmonk

+0

我沒有任何經驗。但是我會用delayed_job或者sidekick做時間的事情。 – Mindbreaker

+1

@sockmonk'every 1.hours do runner「Company.load_news」 end' – Anton

回答

1

每當scpript

every 15.minutes do 
    rake "collect" 
end 

和耙文件

task :collect => :environment do 
    urls = Company.select("companies.url").all.map { |v| v[:url] } 
    Company.update_all_feeds(urls) 
end 
0

如果您無論何時腳本會調用Company.load_news,則該方法必須是一個類的方法,而不是一個實例方法:

def self.load_news 

def Company.load_news 

無論你的命令,總是試圖在軌運行它安慰它似乎以同樣的方式在你的腳本時,調試它。當腳本觸發時檢查你的rails日誌,它應該顯示任何錯誤,假設你的任何工作成功地將它變成cron。

相關問題