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

问题描述 投票:0回答:3

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

实现这种行为的最佳方式是什么?

我正在使用Ruby on Rails 4.1.4顺便说一句。

提前致谢。

ruby-on-rails ruby ruby-on-rails-4
3个回答
2
投票

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

Ryan Bates创造了一个伟大的Railscast关于Whenever: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


4
投票

你最好使用像SidekiqResque这样的框架,而不是自己动手。

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


0
投票

LIB /任务/ mail_task.rake

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

命令行

rake mail_task:send_mail
© www.soinside.com 2019 - 2024. All rights reserved.