Как запускать грабли каждый раз, когда изменяется запись в модели? (лучшая практика) - PullRequest
0 голосов
/ 09 ноября 2011

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

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

Как лучше всего программно определить, обработала ли задача rake уже определенную запись (и пользователь ее вообще не изменил)?

Я думаю о создании хэша для каждой записи и использовании его, чтобы увидеть, изменился ли он. Должен быть более эффективный способ сделать это.

Спасибо за помощь, Alex

1 Ответ

2 голосов
/ 09 ноября 2011

Я думаю, вы должны использовать DelayedJob, а не Cron / Whenever.

В любом случае, вы не думаете, что было бы лучше сделать это при проверке или как до / после фильтра сохранения? Если вы реализовали эту функцию как фильтр before_save, то вы можете использовать грязные атрибуты. Подробнее о грязных атрибутах вы можете найти здесь: http://ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects

...