RoR: использование CRON и Actionmailer для отправки ежедневных обновлений по электронной почте всем пользователям - PullRequest
7 голосов
/ 19 мая 2010

Каков наилучший способ использования задачи cron для ежедневной отправки обновлений по электронной почте всем пользователям моей сети? Электронная почта будет состоять из различной информации от нескольких моделей.

Я хочу сделать что-то вроде «1 новых запросов в друзья: имя ...» из модели запроса и модели пользователя и «Есть 3 предстоящих события от ваших друзей: имя события хост name ... "из модели события и пользователя.

Я понимаю, что это обычная задача, но я не видел много информации о ней, поэтому любые общие советы о том, как сделать что-то подобное, будут с благодарностью!

Примечание: я буду использовать плагин Heroku для ежедневного cron, чтобы выполнить это, если это имеет значение (хотя я не думаю, что это должно).

Ответы [ 2 ]

9 голосов
/ 15 октября 2010

Я обычно просто пишу задание на грабли и добавляю его в CRON.

Задание с рейком будет выглядеть так:

namespace :notifications do
  desc "Sends notifications"
  task :send => :environment do
    MyModel.all_users_to_notify.each do |u|
      MyMailer.notification(u).deliver
    end
  end
end

И ваш crontab должен выглядеть так:

RAILS_ENV=production
HOME=/path/to/your/rails/app
PATH=/path/to/ruby/binaries

30 17 * * * rake notifications:send
2 голосов
/ 29 октября 2013

Если кто-то еще ищет этот ответ, я рекомендую использовать всякий раз, когда гем для задач cron. Это избавит вас от необходимости писать грабли, а также даст вам более приятный синтаксис cron:

Приложение / отправители / my_mailer.rb:

class MyMailer < ActionMailer::Base
  def my_email
    ...
  end
end

конфиг / schedule.rb

job_type :runner, "cd :path && rvm 2.0.0 do bundle exec script/rails runner -e :environment ':task' :output"

every 1.days, at: "7:00 am", roles: [:app] do
  runner "MyMailer.my_email.deliver"
end
...