Я хотів би запланувати щоденне завдання: щодня о 7 ранку я хочу надіслати електронний лист (без втручання людини).
Я працюю над рамкою RoR, і мені цікаво, який найкращий спосіб зробити це?
Я чув про BackgrounDRB, OpenWFEru планувальник або речі, засновані на Cron, але я "новачок і не розумію", який з них зроблений для моєї потреби.
Відповіді:
12 для відповіді № 1Інший варіант - створити завдання граблі, яке виконується завданням cron. Для цього створіть файл some_file.rake
і покладіть його у своє lib/tasks
папку. Ваш файл може виглядати приблизно так:
Рейки 2.x:
task :send_daily_mail, :needs => :environment do
Model.send_daily_mail
end
Рейки 3.x:
task :send_daily_mail => :environment do
Model.send_daily_mail
end
Потім використовуйте cron, щоб виконувати його так часто, як вам подобається:
cd /path/to/app && /usr/bin/rake send_daily_mail
Примітка, можливо, вам доведеться поставити RAILS_ENV=production
у вашому Crontab, якщо ваша програма за замовчуванням перебуває в режимі розробки.
7 для відповіді № 2
Я був вражений (і планую спробувати) rufus-планувальник обговорений дорогоцінний камінь у цьому блозі
Він описує щось подібне:
scheduler = Rufus::Scheduler.start_new
scheduler.every("1m") do
DailyDigest.send_digest!
end
.. що здається досить простим. Цікаво, як легко було б додати конфігурацію на основі HTML?
2 для відповіді № 3
BackgroundRB - це те, що я використовую, і він працює ідеально. У мене надіслано кілька електронних листів, згенерованих BackgroundRB. У мене теж є інші завдання. Тому що це дозволяє як заплановані завдання, так і асинхронні завдання (завдання, які займають більше часу, ніж звичайний цикл відповідей клієнт / сервер).
Я ним користуюся і дуже задоволений цим.
1 для відповіді № 4
Додайте метод класу до однієї зі своїх моделей, яка буде справлятись із вами. Тепер спробуйте виконати цей метод за допомогою сценарію runner
./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
Переконайтесь, що все працює добре. Якщо це так, то нам потрібно змусити команду працювати універсально, правильно встановивши шлях до проекту.
cd /path/to/my/rails/project && ./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
Тепер перейдіть на будь-яку випадкову дирекцію і запустіть цю команду. Якщо вона працює належним чином, запустіть crontab -e
і вставити команду в там налаштування, щоб запускати щодня о 7 ранку. Існує багато пояснень щодо формату cron там, якщо ви їх google, і це повинно бути досить просто.
0 для відповіді № 5
Перейдіть із завданням граблі та виконайте завдання, як прийнятовідповідь уже говорить. Однак зауважте, що оновлення самого файлу cron є ручним завданням. Це може бути добре, якщо ви не змінюєте його під час розвитку. В іншому випадку, ось, як ви можете дозволити Capistrano зробити це за вас: http://push.cx/2008/deploying-crontab-with-your-rails-app