2014-09-15 2 views
0

У меня есть приложение для рельсов. В приложении rails есть много «игр», каждая игра использует API, который я могу использовать, чтобы увидеть, закончилась ли игра. Я хочу, чтобы задание cron для каждой игры проверялось каждые 10 минут, если игра закончилась или нет, если это так, тогда остановите работу cron для этой игры.Нужно руководство для рельсов работы Cron

«rufus-scheduler» кажется законным легким камнем. Я просто ищу некоторые рекомендации, как это сделать. Сохраняю ли я это в своем контроллере, когда игра создана?

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

Будет ли выполняться задание cron, если контроллер больше неактивен пользователем? Каков наилучший способ приблизиться к этому?

+1

Зачем вам нужны записи в каждой игре? Что пахнет мне, как будто может быть лучшее решение? –

+0

Если вы можете придумать один из них, то он позволит двум пользователям «бросить вызов» друг другу в онлайн-видеоигре. У меня есть api, который позволяет мне проверить, закончилась ли каждая игра или нет. Подумайте о чем-нибудь лучше? – user3591126

+0

Вы тоже были правы. Спасибо, Филипп. Просто не понял, что вы пытались сказать. – user3591126

ответ

1

Я никогда не использовал rufus-scheduler, но я использовал whenever, и я считаю, что whenever немного больше используется среди сообщества Rails.

Во всяком случае, чтобы сделать это в rufus-scheduler, я думаю, вы просто добавляете свой код рейлей в блок «каждые 10 м». Допустим, вы создаете метод класса на игры, такие как:

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

затем с Руфусом вы могли бы сделать следующее внутри 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 
+0

Хм. Спасибо за ваш ответ! Любая помощь приветствуется. Итак, вы сказали, что у меня будет два задания cron? Один, чтобы проверить, продолжает ли игра (потому что это то, что нужно, правильно?), И один, чтобы проверить все игры и удалить задание cron из тех, которые закончились? – user3591126

+0

Нет, я не знаю достаточно о том, что вы пытаетесь сделать именно для того, чтобы дать помощь о том, что должны делать работы cron или сколько их нужно. Я просто привел пример создания cron с rufus и всякий раз. –

+0

После второй мысли, я думаю, вы должны просто иметь одно задание cron (запланированное независимо вне любого контроллера), которое запускает и останавливает/очищает ЛЮБЫЕ игры, которые закончились. Я не думаю, что вам нужно несколько заданий cron. –

Смежные вопросы