加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 无法在heroku上排队不响应perform – delayed_

发布时间:2020-12-17 04:17:21 所属栏目:百科 来源:网络整理
导读:我想在heroku上使用delayed_job,我收到以下错误: Cannot enqueue items which do not respond to perform 我正在使用插件http://github.com/pedro/delayed_job 我正在使用以下cron rake任务(cron.rake): task :cron = :environment dorequire 'heroku' put
我想在heroku上使用delayed_job,我收到以下错误:
Cannot enqueue items which do not respond to perform

我正在使用插件http://github.com/pedro/delayed_job

我正在使用以下cron rake任务(cron.rake):

task :cron => :environment do
require 'heroku'    
    puts "starting the cron job at #{Date.today}"

    heroku = Heroku::Client.new(ENV['HEROKU_USER'],ENV['HEROKU_PASS'])
    heroku.set_workers(ENV['HEROKU_APP'],1)

    Contact.all.each do |contact|
      email = contact.email_today #email_today is a contact method returning email object if <= today

      unless contact.email_today == "none"
        puts contact.first_name
        puts email.days
        puts contact.date_entered
        puts email.substituted_subject(contact,contact.colleagues)

        # create the Contact Email object that gets created and sent

        contact_email = ContactEmail.new
        contact_email.contact_id = contact.id
        contact_email.email_id = email.id

        contact_email.subject = email.substituted_subject(contact,contact.colleagues)
        contact_email.date_sent = Date.today
        contact_email.date_created = Date.today

        contact_email.body = email.substituted_message(contact,contact.colleagues)

        contact_email.status = "sent" 

        Delayed::Job.enqueue OutboundMailer.deliver_campaign_email(contact,contact_email)

        contact_email.save #now save the record
        puts "save contact_email:"
        puts contact_email.inspect

      end #end unless

    end #end do

    heroku.set_workers(ENV['HEROKU_APP'],0)
    puts "set heroku workers to 0"

end

这是我正在使用的邮件:

class OutboundMailer < Postage::Mailer 

  def campaign_email(contact,email)
    subject    email.subject
    recipients contact.email
    from       'Me <me@me.com>'
    sent_on    Date.today

    body       :email => email
  end

问题:为什么我收到错误,我该怎么做才能解决?

解决方法

一个作业通常是一个带有“执行”方法的ruby对象,因此将邮件发送无效,您将不得不创建如下所示的作业对象,
 class SomeMailJob < Struct.new(:contact,:contact_email) 
   def perform
     OutboundMailer.deliver_campaign_email(contact,contact_email)
   end
 end

创建一个文件some_mail_job.rb并将其放在/ lib中

在上面的代码中,用en替换enqueue语句

Delayed::Job.enqueue SomeMailJob.new(contact,contact_email)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读