2013-05-17 3 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

С классом с именем News, я надеюсь, что у вас есть что-то в вашем инициализаторе, чтобы избежать сингулярной новости называют «новым». Это просто попрошайничество в конфликте с «новым» методом Рубина. Я бы переименовал это в NewsItem или некоторые из них. Кроме того, что именно выглядит ваша всякий раз, когда конфигурация выглядит? Появляется ли работа среди ваших заданий cron? Для сбора в фоновом режиме каждые 30 минут, это не плохой способ сделать это. – sockmonk

+0

У меня нет опыта с чем угодно. Но я буду использовать delayed_job или sidekick для времени, которое было запланировано. – Mindbreaker

+1

@sockmonk 'каждый 1 час делать бегун« Company.load_news » конец' – 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 

Независимо от команды, всегда попробуйте запустить его в рельсах консоли так же, как он появляется в вашем сценарии когда это, чтобы отладить. Также проверяйте журнал рельсов при запуске сценария, он должен показывать какие-либо ошибки, предполагая, что ваши рабочие места успешно превратились в cron.

 Смежные вопросы

  • Нет связанных вопросов^_^