电子邮件发送的背景线程在Ruby on Rails

时间:2014-09-23 13:02:59

标签: ruby-on-rails ruby ruby-on-rails-4

我需要在Ruby on Rails应用程序中运行后台线程,该应用程序应该在发生特定日期时发送电子邮件,具体取决于DB中的值(并且电子邮件正文应该包含来自此DB的一些信息)。

实现此类行为的最佳方式是什么?

我正在使用Ruby on Rails 4.1.4 btw。

提前致谢。

3 个答案:

答案 0 :(得分:4)

使用像SidekiqResque这样的框架比自己动手更好。

使用Sidekiq,您可以使用Sidekiq Pro或各种第三方项目来安排工作。有关提供调度功能的项目,请参阅Sidekiq维基上的Recurring jobs

答案 1 :(得分:2)

您可以根据需要随时使用gem执行后台作业。 在这里查看github文档。 Whenever

Ryan Bates创建了一个关于每当时的优秀Railscast:Cron jobs Intro in rails

在config / 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

在app / mailers / user_mailer.rb

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

根据要求创建html模板,app / views / user_mailer / send_mail_persons.html.erb

答案 2 :(得分:0)

LIB /任务/ mail_task.rake

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

命令行

rake mail_task:send_mail