ruby-on-rails – 使用Delayed_Job发送电子邮件
我有我认为通过Delayed_Job发送电子邮件的工作设置.但是,我还没有收到我的测试电子邮件,等待更多的事情发生延迟几天是不切实际的.我需要弄明白:
>导致电子邮件无法发送的错误. 我是Delayed_Job的新手,所以请原谅新手的错误. 这是包含send_reminder_emails方法的模型.它们完全没有.delay(run_at:self.mail_date)位,所??以至少我知道它有用了: class Reminder < ActiveRecord::Base belongs_to :user before_save :create_mail_date after_save :send_reminder_emails extend FriendlyId friendly_id :name,use: [:slugged,:finders] def create_mail_date @schedule = IceCube::Schedule.new(self.date) case self.repeating when "Weekly" @schedule.add_recurrence_rule( IceCube::Rule.weekly ) when "Monthly" @schedule.add_recurrence_rule( IceCube::Rule.monthly.day_of_month(self.date.mon) ) when "Yearly" @schedule.add_recurrence_rule( IceCube::Rule.yearly.day_of_year(self.date.yday) ) end if self.repeating self.date = @schedule.next_occurrence(Time.now) end self.mail_date = self.date - 7.days end private def send_reminder_emails if self.reminder ReminderMailer.delay(run_at: self.mail_date).reminder_send(self.user,self).deliver_now self.create_mail_date end end handle_asynchronously :send_reminder_emails end 对计划的引用是通过Ice_Cube gem进行的,并且所有日期内容都已通过我的控制台进行测试并且正在运行.这是我的reminder_mailer.rb: class ReminderMailer < ApplicationMailer default from: "man@manlyartofbbq.com" def reminder_send(user,reminder) @user = user @reminder = reminder mail(to: user.email,subject: "Reminder! #{reminder.name} is fast approaching!") end end 我从他们的Rails 4自述文件中逐步安装了Delayed_Job.任何有助于让这封邮件的延迟部分解决的帮助表示赞赏! 解决方法
您可以通过在特定时间安排作业来使用活动作业发送邮件.
Active Job是一个框架,用于声明作业并使它们在各种排队后端上运行.这些工作可以是定期清理,计费和邮寄等各种工作.任何可以切成小工作单元并且并行运行的东西,真的. 要在生产中排队和执行作业,您需要设置排队后端,也就是说您需要决定Rails应该使用的第三方排队库. Rails本身只提供一个进程中的排队系统,它只将作业保存在RAM中.如果进程崩溃或计算机重置,则使用默认的异步后端丢失所有未完成的作业.这可能适用于较小的应用程序或非关键作业,但大多数生产应用程序需要选择持久的后端. Active Job具有用于多个排队后端的内置适配器(Sidekiq,Resque,Delayed Job等).要获取适配器的最新列表,请参阅ActiveJob::QueueAdapters.的API文档 配置排队适配器后,再创建用于发送邮件的作业 class RemainderMailerJob < ApplicationJob queue_as :default def perform(user,remainder) ReminderMailer.reminder_send(user,reminder).deliver end end 要在特定时间发送邮件,您需要将作业排入队列并使其在特定时间执行.如果您需要在7天后发送邮件,请在您需要的地方拨打这段代码. RemainderMailerJob.set(wait: 1.week).perform_later(user,remainder) 现在这个Job将在1周后执行,然后在那个时间调用邮件程序,所以你的邮件将在特定日期发送. 如果你知道特定的日期时间,那么你可以使用 RemainderMailerJob.set(wait_untill: <Specific date>).perform_later(user,remainder) 如果您对有效工作有任何疑问,请参阅Active Job Basics (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 编译aix6.1下的oracle 10g下的bbed
- ruby-on-rails – Paperclip Errno :: EACCES(权限被拒绝 –
- SWFTools.cs
- Project Perfect让Swift在服务器端跑起来-Hi Linux(二)
- 为什么在c#的继承方法中使用override而不是function
- 使用jsonp跨域调用百度js实现搜索框智能提示,并实现鼠标和
- Oracle:Authid Current_User的使用(2)
- reactjs – 画布库如何适应Flux Pattern和React?
- ruby-on-rails – Ruby on rails:Paperclip和Ruby Mp3Info
- Resharper 5 XML注释格式