我需要在固定时间的一天内拨打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,用于从用户输入调度任务?
答案 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实例,此处的代码只有一个调度程序。