我有一个rails应用程序。 rails应用程序有很多“游戏”,每个游戏都使用一个API,我可以用来查看游戏是否结束。我想为每个游戏设置一个cron作业,如果游戏结束,则每10分钟检查一次,如果是,则停止该游戏的cron作业。
scheduler = Rufus::Scheduler.new
scheduler.every '10m' do
#look for game over, until game over
end
如果用户不再激活控制器,cron作业是否会继续运行?解决这个问题的最佳方式是什么?
答案 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