【问题标题】:Failed deliver with delayed_job延迟作业交付失败
【发布时间】:2014-02-07 07:18:33
【问题描述】:

我的报告控制器中有这个方法:

def send_status
 date = Date.today
 reports = current_user.reports.for_date(date)
 ReportMailer.status_email(current_user, reports, date).deliver
 reports.update_all(:sent_mail => true)
 head :ok
 rescue => e
 render text: e.message, status: :bad_request
end

发送此状态时我无法提出任何请求,因此我使用延迟作业,替换

ReportMailer.status_email(current_user, reports, date).deliver with ReportMailer.status_email(current_user, reports, date).send_later(:send_status)

但我收到 400 错误的交货请求。有帮助吗?谢谢!

【问题讨论】:

  • 如果知道确切的错误堆栈跟踪会有所帮助。不要使用包罗万象的救援语句,而是使用特定的错误类来避免在调试时出现歧义。如果您删除救援块,您会得到什么错误?
  • Completed 500 Internal Server Error in 24ms TypeError (can't dump anonymous module: #<0xc9c9cc4>

标签: ruby-on-rails delayed-job


【解决方案1】:

避免将对象传递给delayed_job 并改用ID:(您的delayed_job 进程可能会静默失败)

ReportMailer.delay.status_email(current_user.id, reports_ids, date)

在 status_email 中,拉取 current_user 和报告:

def status_email(userid, reports_ids, date)
  current_user = User.find_by_id(userid)
  reports = Report.find_all_by_id(reports_ids)
  ...
end

【讨论】:

    猜你喜欢
    • 2018-08-16
    • 2012-08-02
    • 2011-08-30
    • 2017-02-23
    • 1970-01-01
    • 2011-06-01
    • 2016-03-29
    • 2013-02-10
    • 2012-07-15
    相关资源
    最近更新 更多