簡體   English   中英

如何調試Rails中的ruby中的“無方法”錯誤?

[英]How do I debug this 'no method' error in ruby on rails?

我收到以下錯誤:

Delayed::Job SomeMailJob# (NoMethodError) "undefined method `subject' for #<YAML::Object:0x2b0a191f4c78>"

這來自引用上面SombMailJob的以下代碼:

 class SomeMailJob < Struct.new(:contact, :contact_email) 
   def perform
     OutboundMailer.deliver_campaign_email(contact,contact_email)
   end
 end

這是郵件:

class OutboundMailer < Postage::Mailer 

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

    body       :email => email
  end

這是調用郵件程序的cron任務:

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" || email.nil?
    puts "contact info inside cron job"
    puts contact.first_name
    puts email.days
    puts contact.date_entered
    puts contact.colleagues
    puts "substituted subject:"
    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)


    puts contact_email.subject

    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)
    Delayed::Job.enqueue SomeMailJob.new(contact,contact_email)

    contact_email.save #now save the record

問題:為什么會出現此錯誤? 我什至不知道對象是什么,因為它附帶了代碼,因此我無法真正進一步深入調試。

這對我有用。 似乎與您遇到的問題相同。

Rails延遲的工作和圖書館課程

當您排隊延遲的作業時,它會將涉及的內容(類,正在調用的hte方法的名稱,參數)序列化為YAML,以便稍后可以在運行作業時將其拉出並使用它們。

在您的情況下,在.subject之前, .subject email參數未從YAML正確反序列化。

我發現,delay_job往往難以對不是簡單存儲的ActiveRecord對象或原始類型(整數,字符串)的任何內容進行序列化/反序列化。 我總是嘗試進行設置,以便我的Job對象僅使用記錄ID(整數),然后在perform方法中找到那里的對象並使用它們。 這樣絕對可以避免您遇到的麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM