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



用户命令付费后,我想发送确认电子邮件(如果有帮助,我正在使用 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 服务器,但我无法弄清楚原因。

你有什么提示吗?

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

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

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

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

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

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

最新更新