我需要按照管理员指定的时间表发送邮件。管理员可以指定发送邮件的两天。通过管理界面指定的日期,即公司活动终止前几天。
我会使用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
我做对了吗?
答案 0 :(得分:0)
我说它不是最好的做法,你应该移动实际检查的逻辑并将电子邮件发送到一个单独的rake任务,你将每隔5分钟使用一次调用rake任务,并检查完全填写通知标准的模型的rake任务。
这link将帮助您开始使用rake。
我建议您只需在模型中创建一个方法,通过电子邮件发送给公司,然后在rake任务中完成其余工作,通常位于/ project / lib / task目录中