2012-02-18 2 views
0

Я ищу совет о том, как опросить RSS с заданным интервалом, например, 6 часов.Rails опрос RSS каждые 6 часов

Следующий код работает, он считывает и анализирует канал и добавляет его в базу данных. Он добавляет только новые каналы. Вот классный метод:

def self.update_from_feed(feed_url) 
    feed = Feedzirra::Feed.fetch_and_parse("http://feeds.feedburner.com/PaulDixExplainsNothing") #Example feed 
    feed.entries.each do |entry| 
    unless exists? :guid => entry.id 
     create!(
     :name   => entry.title, 
     :url   => entry.url, 
     :published_at => entry.published, 
     :guid   => entry.id 
    ) 
    end 
    end 
end 

Как запустить весь этот метод класса, скажем, каждые 6 часов? Я новичок в Ruby (и Rails), поэтому любая помощь будет оценена с помощью примера. Я хочу, чтобы избежать запуска внешнего задания cron, если это возможно. Я хочу, чтобы он запускался каждые 6 часов в коде, если это имеет смысл. Спасибо

+0

Возможный дубликат [Задача cron для рельсов: лучшие практики?] (Http://stackoverflow.com/questions/285717/a-cron-job-for-rails-best-practices) –

ответ

4

Нет, не имеет смысла не использовать cron для этого. Для этого нужен cron, он во имя программы.

Если вам не нравится синтаксис cron, это круто, каждый раз, когда https://github.com/javan/whenever, который дает хороший синтаксис Ruby для генерации задания cron и команды, которая позволяет вам это сделать.

Однако, ради любви к Богу, не пытайтесь изобрести новый способ сделать это, если только вы не добавляете некоторые функции убийцы. Используйте cron, двигайтесь дальше.

+0

Привет, спасибо за Ответить. Я наткнулся на это раньше, но я был довольно смущен. Могу ли я запустить модель с ней? такие как 'каждые 6 часов делать бегун« MyModel.some_process » конец« Я не понимаю часть бегуна, MyModel будет именем модели, но что такое .some_process? Будет ли это .update_from_feed? – user1104783

+0

Это возможность. Я склонен придерживаться использования рейк-задач, потому что их легче понять. Напишите простую задачу рейка, которая загружает среду, а затем выполняет метод класса. Таким образом, вы можете даже динамически загружать URL-адреса, которые вы хотите получить Feedzirra, и вы можете перебирать их, все в фоновом режиме и не использовать ресурсы, которые обслуживают веб-сайт для пользователей. –

+0

Спасибо за предложение, и я попробую это. – user1104783