Моя проблема не кажется уникальной. В принципе у меня довольно дорогостоящий процесс, который нужно запускать регулярно, но только если пользователь запускает определенное состояние.Как реализовать триггеры в Rails?
Например, у меня есть «анкета», и я анализирую результаты и даю рекомендации из анализа. Анализ и составление рекомендаций - это дорогостоящий процесс, иногда 10-20 с и может увеличиваться по мере увеличения набора данных. Кстати, я сейчас ищу способы улучшить производительность этого алгоритма.
Мои мысли по этому поводу состоят в том, чтобы реализовать состояние для этого пользователя, в котором говорится, что анализ/рекомендации истекли, опрос этого состояния, и если он истек, запустите дорогостоящий процесс. Я бы установил это состояние истек, когда пользователь заполнил анкету.
Моя текущая система - это рельсы 3.0, ruby 1.9.2 и MySQL, работающие на серверах EC2. В настоящее время я использую DelayedJob для перевода этого процесса в фоновое задание, но я не реализовал состояние/триггер.
Итак, в заключение мой вопрос: 1) Это даже правильная архитектура с учетом сценария? и 2) Есть ли какой-либо камень или реализация этого, который я могу использовать, который работает с Rails?
Я определенно собираюсь проверить часовой механизм, выглядит полезным для выполнения обычных задач. Я не думаю, что это поможет в этом сценарии, хотя, как я думаю, каждый раз, когда я устанавливаю состояние для запуска задания, я могу также поставить его в очередь. Я почти нуждаюсь в ответе в реальном времени, поэтому я стараюсь думать об этом творчески. –
Вы можете выполнить задание в очереди в действии контроллера, отвечающем запросу, чтобы сохранить вопросник, и пока доступен работник ди-джея, он вытащит задачу из очереди и запустит ее в течение нескольких секунд , – coreyward