如何使用rufusscheduler和Rails4调用一个动态调度器来调用一个方法在一天内多次获取tweets



我需要在一天中调用高音扬声器api,固定时间为下午1点、3点、9点。。我正在使用twitter gem和rufus调度器

这是我的型号

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

它工作得很好,但我如何根据用户输入设置多次时间,如凌晨1点、下午3点、上午9点来安排任务?

将控制器简化为:

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

然后确保您有一个config/ininitializers/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

每次浏览器获取/馈送时,您的代码都会创建一个rufus调度程序实例,这里的代码只有一个调度程序。

最新更新