我正在使用rufus scheduler gem来运行后台作业。我用这个宝石发送消息和图像到twitter和facebook。下面是我的代码
def schedule_post_to_twitter(twitter_auth, file=nil)
scheduler = Rufus::Scheduler.new
scheduler.at self.post_at do
if file.present?
self.post_to_twitter(twitter_auth,file)
else
self.post_to_twitter(twitter_auth)
end
end
end
假设我将把消息安排在"2014-03-18 12:23:02",在开发中它会在12.23发布消息,但在生产中它会立即发布。调度在生产中不起作用。请帮助我如何使这个工作在生产
所以您正在为每个时间表创建一个新的rufus调度程序…这是个坏主意,这是在浪费资源。一个单独的、共享的、rufus-scheduler就足够了。
请阅读https://github.com/jmettraux/rufus-scheduler/#so-rails上的文档,了解如何通过Rails初始化器设置rufus-scheduler实例。这里的例子是从控制器调度的,你可以随意从你的模型方法调度。
也必读:http://www.chiark.greenend.org.uk/~sgtatham/bugs.html
通常,当rufus-scheduler立即触发时,这意味着"at"已经过去了。
试着用下面的代码看看这个假设是否成立:
def schedule_post_to_twitter(twitter_auth, file=nil)
scheduler = Rufus::Scheduler.new # suicidal technique
scheduler.at self.post_at do
#if file.present?
# self.post_to_twitter(twitter_auth, file)
#else
# self.post_to_twitter(twitter_auth)
#end
p [ :post_at, self.post_at ]
p [ :post_at, Rufus::Scheduler.parse(self.post_at) ]
p [ :now, Time.now ]
end
end
请阅读我的另一个答案。为每个计划启动一个新的rufus-scheduler实例是很危险的…