Сервер Rails не работает, когда работа отправляет почтовую программу с вложением в формате PDF - PullRequest
0 голосов
/ 26 июня 2018

После оплаты пользовательской команды я хочу отправить электронное письмо с подтверждением (я использую 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 голосов
/ 26 июня 2018

У меня раньше были подобные проблемы с зависанием rails server при использовании wicked_pdf.

Это произошло потому, что по умолчанию сервер rails является однопоточным.

Последовательность событий (я думаю):

  1. Фоновое задание запрашивает страницу с сервера, чтобы отобразить ее в формате PDF
  2. Страница включает в себя некоторые активы
  3. wicked_pdf запрашивает ресурсы с сервера
  4. Сервер все еще обрабатывает запрос на страницу, поэтому не может ответить
  5. wicked_pdf терпеливо ждет (в конечном итоге вы можете получить тайм-аут).

Конечно, пока все это происходит, ваше приложение также не отвечает, поскольку все запросы браузеров присоединяются к очереди.

В этом случае я работал так, чтобы локально использовать puma и убедиться, что он имеет несколько потоков для обработки входящих запросов.

...