我需要在Ruby on Rails应用程序中运行后台线程,该应用程序应该在发生特定日期时发送电子邮件,具体取决于DB中的值(并且电子邮件正文应该包含来自此DB的一些信息)。
实现此类行为的最佳方式是什么?
我正在使用Ruby on Rails 4.1.4 btw。
提前致谢。
答案 0 :(得分:4)
使用像Sidekiq或Resque这样的框架比自己动手更好。
使用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