[英]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
問題:為什么會出現此錯誤? 我什至不知道對象是什么,因為它附帶了代碼,因此我無法真正進一步深入調試。
這對我有用。 似乎與您遇到的問題相同。
當您排隊延遲的作業時,它會將涉及的內容(類,正在調用的hte方法的名稱,參數)序列化為YAML,以便稍后可以在運行作業時將其拉出並使用它們。
在您的情況下,在.subject
之前, .subject
email
參數未從YAML正確反序列化。
我發現,delay_job往往難以對不是簡單存儲的ActiveRecord對象或原始類型(整數,字符串)的任何內容進行序列化/反序列化。 我總是嘗試進行設置,以便我的Job對象僅使用記錄ID(整數),然后在perform方法中找到那里的對象並使用它們。 這樣絕對可以避免您遇到的麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.