如何使用rufus-scheduler和Rails 4调用动态调度程序来调用方法以在一天内多次获取推文

时间:2014-10-26 22:11:35

标签: ruby-on-rails ruby rufus-scheduler

我需要在固定时间的一天内拨打tweeter api,如下午1点,下午3点,上午9点。 我正在使用twiter gem和rufus-scheduler

这是我的模特

class Feed < ActiveRecord::Base

  def self.latest
    order('created_at desc').take(500)
  end

  def self.pull_tweets
    $client.search("#ukraine", since_id: maximum(:tweet_id), count: 10).take(10).each do |tweet|

      create!(
        tweet_id: tweet.id,
        content: tweet.text,
        screen_name: tweet.user.screen_name,
        )

     end
 end

end

这是我使用调度程序调用pull_tweets

的控制器
class FeedsController < ApplicationController

  def index

    scheduler = Rufus::Scheduler.new
    scheduler.schedule_every('60s') do
      Feed.pull_tweets
    end
   @tweets = Feed.latest
 end
end

它工作得很好,但是如何设置多次,如1AM,3PM,9AM,用于从用户输入调度任务?

1 个答案:

答案 0 :(得分:1)

将您的控制器简化为:

class FeedsController < ApplicationController
  def index
    @tweets = Feed.latest
  end
end

然后确保你有一个如下所示的config / initializers / scheduler.rb:

require 'rufus-scheduler'

Rufus::Scheduler.singleton.every('60s') { Feed.pull_tweets }

这样你就可以为整个Ruby进程安装一个调度程序。

回答你的问题:

require 'rufus-scheduler'

Rufus::Scheduler.singleton.cron('0 1,9,15 * * *') { Feed.pull_tweets }
  # pull tweets at 0100, 0900 and 1500

每次浏览器GETs / feeds时,您的代码都会创建一个rufus-scheduler实例,此处的代码只有一个调度程序。