需要指导Cron Job Rails

时间:2014-09-15 18:35:26

标签: ruby-on-rails cron

我有一个rails应用程序。 rails应用程序有很多“游戏”,每个游戏都使用一个API,我可以用来查看游戏是否结束。我想为每个游戏设置一个cron作业,如果游戏结束,则每10分钟检查一次,如果是,则停止该游戏的cron作业。

“rufus-scheduler”似乎是一个合法的轻松宝石。我只是在寻找一些如何解决这个问题的指导。在创建游戏时,我是否将其存储在我的控制器中?

  scheduler = Rufus::Scheduler.new
  scheduler.every '10m' do
    #look for game over, until game over
  end

如果用户不再激活控制器,cron作业是否会继续运行?解决这个问题的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

我从未使用rufus-scheduler,但我使用过whenever,我相信whenever在Rails社区中使用得更多。

无论如何,要在rufus-scheduler中执行此操作,我认为您只需在“每10m”块中添加rails代码。假设您在Game上创建了一个类方法,例如:

class Game
  def self.clean_ended_games
    #logic to clean/stop/remove cron for games that have ended
  end
end

然后使用rufus,您将在config/initializers/scheduler.rb内执行以下操作:

require 'rufus-scheduler'
scheduler = Rufus::Scheduler.new
scheduler.every '10m' do
  Game.clean_ended_games
end

使用时会非常相似。在config/schedule.rb文件中输入:

every 10.minutes do
  runner "Game.clean_ended_games"
end