当作业发送带有pdf附件的订单邮件时,Rails服务器关闭

时间:2018-06-26 13:31:10

标签: ruby-on-rails actionmailer sidekiq wicked-pdf

支付用户命令后,我想发送确认电子邮件(如果有帮助,我正在使用Mandrill)。这些确认之一涉及当用户购买别人的礼品卡时的礼品卡。

我想在此电子邮件中附上礼品卡(pdf格式)。

这是我邮件中的相应代码:

def confirmation_cmd_gift_card(commande)
  @commande = commande
  @gift_card = GiftCard.find_by(commande_id: commande.id)

  mail(to: @commande.user.email, subject: " Un grand merci pour votre commande !") do |format|
    format.html
    format.text
    format.pdf do 
      attachments["carte_cadeau_pennarbox.pdf"] = WickedPdf.new.pdf_from_string(
        render_to_string(
          pdf: 'carte_cadeau_pennarbox',
          encoding: 'UTF-8',
          template: 'order_notifier/carte_cadeau_pennarbox.pdf.erb',
          layout: 'cc_pdf.html',
          disposition: 'attachment'
        )
      )
    end
  end
end

后台作业(Sidekiq)执行发送电子邮件的任务(适用于其他类型的电子邮件)。

当作业执行礼品卡电子邮件发送时,我的Rails服务器似乎停止了。这是日志:

Rendered order_notifier/carte_cadeau_pennarbox.pdf.erb within layouts/cc_pdf.html (19.2ms)
"***************[\"/Users/JUSTINE/.rvm/gems/ruby-2.3.0/bin/wkhtmltopdf\", \"-q\", \"file:////var/folders/2k/r8df_vt57qbcj2s3w5p4nty40000gn/T/wicked_pdf20180626-47763-v7znb.html\", \"/var/folders/2k/r8df_vt57qbcj2s3w5p4nty40000gn/T/wicked_pdf_generated_file20180626-47763-1pmlnk.pdf\"]***************"

它看起来不像是一个错误...正在发生某些事情,并且正在破坏我的Rails服务器,但我不知道为什么。

您有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在使用wicked_pdf时,rails server挂起之前,我也遇到过类似的问题。

这是因为默认情况下,rails服务器是单线程的。

事件的顺序是(我认为):

  1. 后台作业从服务器请求页面以将其呈现为PDF
  2. 页面包含一些资产
  3. wicked_pdf向服务器索要资产
  4. 服务器仍在处理页面请求,因此无法响应
  5. wicked_pdf耐心等待(您最终可能会超时)。

当然,在这一切发生时,您的应用也无响应,因为来自浏览器的所有请求都加入了队列。

在这种情况下,我可以使用它的方法是在本地使用puma并确保它具有多个线程来处理传入的请求。