ruby – ActiveJob :: DeserializationError:尝试反序列化参数
发布时间:2020-12-17 03:18:54 所属栏目:百科 来源:网络整理
导读:我正在尝试在生产中发送邮件,但它正在抛出Activejob deserailization error.sidekiq正在后台运行.我添加了sidekiq gem.我在comment_notification.rb中编写了一个方法,用于向用户发送电子邮件.然后在控制器中创建动作我添加了这个 def create CommentNotifica
我正在尝试在生产中发送邮件,但它正在抛出Activejob deserailization error.sidekiq正在后台运行.我添加了sidekiq gem.我在comment_notification.rb中编写了一个方法,用于向用户发送电子邮件.然后在控制器中创建动作我添加了这个
def create CommentNotification.send_comment_mail(@current_user).deliver_later(wait: 1.minute) end def send_comment_email(current_user) mail( to: current_user.email,:subject => "commented on post",:from => "<noreply@xxx.com>") end 它在本地服务器上工作正常,但在生产中我收到此错误 /home/apps/commentpost/shared/bundle/ruby/2.3.0/gems/sidekiq-4.2.3/lib/sidekiq/processor.rb:69:in `run' /home/apps/commentpost/shared/bundle/ruby/2.3.0/gems/sidekiq-4.2.3/lib/sidekiq/util.rb:17:in `watchdog' /home/apps/commentpost/shared/bundle/ruby/2.3.0/gems/sidekiq-4.2.3/lib/sidekiq/util.rb:25:in `block in safe_thread' 2016-11-18T06:47:16.162Z 19093 TID-uw66g ActionMailer::DeliveryJob JID-e56b150964abf082e78089d9 INFO: start 2016-11-18T06:47:16.167Z 19093 TID-uw66g ActionMailer::DeliveryJob JID-e56b150964abf082e78089d9 INFO: fail: 0.005 sec 2016-11-18T06:47:16.167Z 19093 TID-uw66g WARN: {"context":"Job raised exception","job":{"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ActionMailer::DeliveryJob","queue":"mailers","args":[{"job_class":"ActionMailer::DeliveryJob","job_id":"96e06bc6-1380-47b9-9393-9727868b3897","queue_name":"mailers","priority":null,"arguments":["CommentNotification","send_comment_email","deliver_later",{"_aj_globalid":"gid://commentpost/comment/40"},{"_aj_globalid":"gid://commentpost/User/20"}],"locale":"en"}],"retry":true,"jid":"e56b150964abf082e78089d9","created_at":1479450405.8364522,"enqueued_at":1479451636.1602836,"error_message":"Error while trying to deserialize arguments: Couldn't find Comment with 'id'=40","error_class":"ActiveJob::DeserializationError","failed_at":1479450405.8429642,"retry_count":6,"retried_at":1479451636.1668367},"jobstr":"{"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ActionMailer::DeliveryJob","queue":"mailers","args":[{"job_class":"ActionMailer::DeliveryJob","job_id":"96e06bc6-1380-47b9-9393-9727868b3897","queue_name":"mailers","priority":null,"arguments":["CommentNotification","send_comment_email","deliver_later",{"_aj_globalid":"gid://commentpost/comment/40"},{"_aj_globalid":"gid://commentpost/User/20"}],"locale":"en"}],"retry":true,"jid":"e56b150964abf082e78089d9","created_at":1479450405.8364522,"enqueued_at":1479451636.1602836,"error_message":"Error while trying to deserialize arguments: Couldn't find Comment with 'id'=40","error_class":"ActiveJob::DeserializationError","failed_at":1479450405.8429642,"retry_count":5,"retried_at":1479450981.998904}"} 2016-11-18T06:47:16.167Z 19093 TID-uw66g WARN: ActiveJob::DeserializationError: Error while trying to deserialize arguments: Couldn't find Comment with 'id'=40 2016-11-18T06:47:16.167Z 19093 TID-uw66g WARN: / 有人可以帮我解决这个疑问吗?为此,我将感激不尽. 解决方法
据我所知,控制器中的create方法还会创建注释并发送新创建的注释的电子邮件?
那么最好在这里使用回调. # in model after_commit :send_mail,on: :create private def send_mail CommentNotification.send_comment_mail(campaign.user).deliver_later end 然后,您可以确保在邮件发送之前,记录确实存在于数据库中. 这里的问题是,您运行注释#create并将控制器中的邮件入队.现在它可能发生,Sidekiq在Rails提交新评论之前运行任务. 问候,温泉 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |