Ruby on rails 3 - Rufus调度器在生产环境中没有按照预定时间发送消息



我正在使用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实例是很危险的…

相关内容

  • 没有找到相关文章

最新更新