每两分钟后将电子邮件从excelsheet发送到电子邮件地址

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

希望每2分钟发送一次电子邮件到excelsheet的电子邮件地址。

我尝试使用sidekiq和delayed_job,但是在延迟但同时发送电子邮件的情况下仍在拍摄。

尝试了delay,delay_for和某些方法但没有帮助

工作文件

class MarketingEmailsWorker
include Sidekiq::Worker 
def perform(*args)
    EmailList.read_file(args)
end

结束

EmailList.rb型号

def self.read_file(record)
    list = EmailList.find(record).last
    spreadsheet = Roo::Spreadsheet.open(list.file.path, extension: :xlsx)
    header = spreadsheet.row(1)
    (2..spreadsheet.last_row).each do |i|
        row = Hash[[header, spreadsheet.row(i)].transpose]
        email = row["Email"]   
        if email.present?                                                                                                                                                                                 
            geography= row["Geography"].to_s
            lname = row["Name"]
            designation = row["Designation"]
            Notifier.send_template_mail(geography,email,lname,designation,list.emails_template).deliver_now
        end
    end
end
ruby ruby-on-rails-4 actionmailer sidekiq delayed-job
1个回答
0
投票

按代码排列,实际上没有什么可行的选择,只是有点怪异的东西

def perform(*args)
  while true do
    EmailList.read_file(args)
    sleep(120) # 2 minutes in seconds
  end
end

但是我不建议在任何生产系统中使用它。由于您无法真正控制该工作人员。


更好的方式

解决此问题将使用一些scheduler在那里,您可以像sidekiq worker一样使用cron设置yml。有很多选择可以安排您的工人,例如cron: '*/2 * * * *'every: '2m'

delayed_job还有一个计划程序选项,带有可靠的文档。

请注意,一旦您的工作人员处理时间超过2分钟,您就会在队列中堆积工作人员。

© www.soinside.com 2019 - 2024. All rights reserved.