Запланируйте метод для запуска один раз в день в Rails 3 - PullRequest
3 голосов
/ 22 марта 2012

У меня есть метод, который проверяет, отправил ли пользователь расписание за предыдущий месяц и, если нет, отправляет напоминание по электронной почте.Этот метод должен запускаться каждый день.Ни один пользователь не предпринимает никаких действий для фактического запуска этого метода, он просто запускается в определенное время каждый день.

Есть идеи, как лучше всего реализовать это в Rails 3?

Ответы [ 4 ]

3 голосов
/ 22 марта 2012

Создайте рейк-задачу для запуска метода + доставки электронной почты и взгляните на камень «всегда», который может автоматизировать генерацию крон.

https://github.com/javan/whenever

Затем вы можете создать всякий раз конфигурационный файл в "config / schedule.rb" со следующим;

every 1.day, :at => '12:00 pm' do
  rake "timesheet:check"                 
end
0 голосов
/ 22 марта 2012

Я занимаюсь разработкой на Mac OS X, с нашим рабочим компьютером на CentOS, но это должно относиться и к Ubuntu.

У меня есть задача rake, определенная в report.rake

namespace :report do
  desc "Email stats"
  task :email_global_stats, [] => :environment do |t, args|
    StatsMailer.global_stats_email.deliver
  end
end

И основная часть логики проверки новой статистики и отправки по электронной почте определяется в StatsMailer.Затем на производственной машине у меня есть это в моем crontab (доступ через crontab -e):

30 7 * * * RAILS_ENV=production /usr/local/bin/rake -f /home/user/code/stats/current/Rakefile report:email_global_stats

Это установлено в 7:30 утра, просто чтобы у меня не все работало в полночь.И затем я хочу проверить локально, я просто запускаю:

rake report:email_global_stats

из моего каталога разработки.Вы также должны убедиться, что postfix запущен, набрав это в Mac OS X:

sudo postfix start
0 голосов
/ 22 марта 2012

Взгляните на Resque Scheduler . Вы можете установить cron на 0 0 * * *, это будет запускать ваш сценарий каждый день. Здесь - это Railscasts на Resque .

0 голосов
/ 22 марта 2012

Вам обязательно нужно запустить это как часть вашего приложения rails? Может ли это быть самостоятельной услугой?

Если вы можете убрать эту функциональность из вашего приложения rails и запустить ее самостоятельно, вы можете просто написать скрипт ruby ​​и запустить его в назначенное время с помощью задания cron.

Это может привести к ненужной путанице в приложении rails, потому что вам нужно что-то, чтобы постоянно опрашивать время и смотреть, не пора ли сделать вызов этого метода. Работа cron - это всегда более простой способ выполнять такие задачи, как ваша.

Я был бы рад указать вам ресурсы, которые помогут вам настроить работу cron, если бы вы могли сказать мне, какую операционную систему вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...