2014-09-23 2 views
0

Мне нужно запустить фоновый поток в приложении Ruby on Rails, который должен отправить электронную почту, когда произошла определенная дата, в зависимости от значений в БД (и тело письма должно содержать некоторую информацию из этой БД).Справочная информация для отправки электронной почты в Ruby on Rails

Каков наилучший способ достижения такого поведения?

Я использую Ruby on Rails 4.1.4 кстати.

Заранее спасибо.

+0

ли вы имеете в виду, чтобы выполнить работу в определенное время? (где работа просто является электронной почтой) – user3334690

+0

@ user3334690 Точнее, при определенном условии. Условие в этом случае - это дата, которая рассчитывается как «date_in_some_column_of_the_table + 30» – FrozenHeart

ответ

2

Вы можете использовать всякий раз, когда камень для выполнения фоновых заданий в соответствии с вашими требованиями. Ознакомьтесь с документами github здесь. Whenever

Ryan Bates создал большой Railscast о случаях, когда: Cron jobs Intro in rails

В конфигурации/schedule.rb

every 2.hours do 
runner User.send_email_to_users 
end 

В модели пользователя

def self.send_email_to_users 
    //write your logic here and call to action to send mails. 
    UserMailer.send_mail_persons(user).deliver 
    //pass any other data if required in arguments. 
end 

В приложение/почтовые программы/user_mailer.rb

def send_mail_persons(user) 
    @user = user 
    mail :to => @user.email, :subject => "Amusement.", :from => MAIL_ADDRESS 

конец

Создание шаблона HTML согласно требованию, приложение/просмотров/user_mailer/send_mail_persons.html.erb

+0

Спасибо! Вы знаете, работает ли этот камень с Heroku? – FrozenHeart

+1

для heroku использовать аддон планировщика https://addons.heroku.com/scheduler, Подробнее здесь https://blog.heroku.com/archives/2011/11/12/heroku_scheduler_add_on_now_available – Bijendra

2

Вам будет лучше использовать фреймворк, например Sidekiq или Resque, чем делать это самостоятельно. С Sidekiq вы можете использовать плагин Sidetiq для планирования определенных действий.

0

Библиотека/Задачи/mail_task.rake

namespace :mail_task do 
    desc "Send Mail" 
    task :send_mail => :environment do 
    ... 
    end 
end 

Командная строка

rake mail_task:send_mail 
+0

Это фоновая работа? –

Смежные вопросы