rufus调度程序不会在生产中的预定时间发送消息

时间:2014-03-18 05:55:55

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

我使用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本身发布消息,但在生产中它会立即发布。调度不适用于生产。请帮助我如何使它在生产中工作。

2 个答案:

答案 0 :(得分:0)

所以你要为每个时间表创建一个新的rufus调度程序......这是一个坏主意,它浪费了资源。单个共享的rufus调度程序就足够了。

请阅读https://github.com/jmettraux/rufus-scheduler/#so-rails上的文档,了解如何通过Rails初始化程序设置rufus-scheduler实例。这个示例是从控制器进行调度,可以随意根据您的模型方法进行调度。

强制性阅读:http://www.chiark.greenend.org.uk/~sgtatham/bugs.html

答案 1 :(得分:0)

通常,当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实例是危险的......