Фоновая обработка в рельсах

Это может показаться FAQ по stackoverflow, но мои требования немного отличаются. Хотя ранее я использовал BackgroundRB и DJ для запуска фоновых процессов в ruby, на этот раз мне нужно выполнить тяжелую аналитику и математические вычисления на огромном наборе данных, и мне нужно сделать это только в первые 15 дней месяца. . Исходя из этого, у меня возникает соблазн использовать cron и запустить скрипт ruby ​​для достижения этой цели.

Что я хотел бы знать / понять, так это: 1. Является ли использование cron хорошей идеей (потому что я не системный администратор, и поэтому, хотя у меня есть базовое представление о cron, я не слишком уверен, что сделаю это идеально) 2 - Можем ли мы как-то изменить DJ, чтобы он запускался только в первые 15 дней месяца (с/без использования cron), а затем просто останавливался и выходил, как только все задания в очереди на день закончились (не хочу, чтобы он пинговать БД каждый раз для нового задания... какие бы задания ни были в очереди при запуске DJ, это все).

Я не уверен, правильно ли я поставил вопрос, но любая помощь в этом направлении будет высоко оценена.

Спасибо


person hashpipe    schedule 12.04.2010    source источник


Ответы (4)


Со спецификацией времени cron «минута, час, день, месяц, день недели», с 3:33 утра с 1 по пятнадцатое число каждого месяца будет «33 3 1-15 * *».

person par    schedule 12.04.2010

Использование cron было бы очень просто, и у вас есть много примеров, и это надежно.

В любом случае, вот несколько скринкастов из Railcasts, которые вы можете посмотреть:

Старлинг и Рабочий

Пользовательский демон

person Adnan    schedule 12.04.2010

Да, почему бы не? Иди с кроном. Он действительно хорошо протестирован в реальных условиях, хорошо подходит для выполнения периодических задач и невероятно прост в использовании. Вам даже не нужно изучать синтаксис crontab (хотя это очень просто) — просто поместите свой скрипт в /etc/cron.daily (эта опция может быть доступна только в некоторых дистрибутивах Linux).

Я не уверен насчет «только первых пятнадцати дней месяца», но вы можете легко справиться с этим условием в своей задаче, верно?

РЕДАКТИРОВАТЬ:

Ознакомьтесь с ответом par, чтобы узнать, как запускать задачу только в определенный диапазон дней.

person Milan Novota    schedule 12.04.2010
comment
возможно, стоит рассмотреть возможность использования railscron — workingwithrails.com/railsplugin/4962-rails-cron - person klochner; 12.04.2010

У меня тоже было это требование. Я следовал рецепту «Автоматические периодические задачи» 75 в Расширенные рецепты Rails книга. Рецепт написан Дэвидом Боком. В нем есть несколько фрагментов кода и рекомендации о том, как этого можно добиться с помощью cron и capistrano. Однако существует нерешенная (но упомянутая) проблема, связанная с пользователями/разрешениями, которые должны быть на целевой машине. На самом деле это не сложно сделать правильно, вам просто нужно не забыть это сделать и поместить в свои сценарии развертывания capistrano.

Похоже, что Дэвид Бок продолжил работу над этим и теперь создал гем для использования с cron: см. его блог и подпишитесь на crondonkulous на github. Crondonkulous вполне может позаботиться об этом пользователе/разрешении и многом другом, я не пробовал.

ярл

person Jarl    schedule 13.04.2010