/ / Який найкращий спосіб запланувати завдання надсилання електронної пошти з Ruby on Rails? - рубін на рейках, планування, планові завдання

Який найкращий спосіб запланувати завдання надсилання електронною поштою за допомогою Ruby on Rails? - рубіни на рейках, планування, заплановані завдання

Я хотів би запланувати щоденне завдання: щодня о 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