按计划发送通知

时间:2014-04-22 08:01:19

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

我需要按照管理员指定的时间表发送邮件。管理员可以指定发送邮件的两天。通过管理界面指定的日期,即公司活动终止前几天。

我会使用Whenver

class Email < ActiveRecord::Base
  validates :name, uniqueness: true
end

class CreateEmails < ActiveRecord::Migration
  def change
    create_table :emails do |t|
      t.string :name
      t.string :value
      t.index :name, unique: true

      t.timestamps
    end
  end
end

set :output, "#{path}/log/cron_rails_app.log"

every 5.minutes do
  rake "delivery_campaign_status:start"
end

class NotifyEndedCampaigns

  def start
    @end_day = Setting.find_by(name: 'notify_day_from').value
    @campaigns = Campaign.where(notified: false).where("ends_at < ?",  Time.now + @end_day.to_i.day )

    @campaigns.each do |campaign|
      CampaignEndedMailer.notify(campaign, @end_day).deliver
      campaign.notified = true
      campaign.save
    end
  end
end

require 'notify_ended_campaigns'

namespace :delivery_campaign_status do
  desc 'nitify Campaign end day'

  task start: :environment do
    puts 'Start sending ended campaigns notifications'
    NotifyEndedCampaigns.new.start
  end
end

我做对了吗?

1 个答案:

答案 0 :(得分:0)

我说它不是最好的做法,你应该移动实际检查的逻辑并将电子邮件发送到一个单独的rake任务,你将每隔5分钟使用一次调用rake任务,并检查完全填写通知标准的模型的rake任务。

link将帮助您开始使用rake。

 我建议您只需在模型中创建一个方法,通过电子邮件发送给公司,然后在rake任务中完成其余工作,通常位于/ project / lib / task目录中