Symfony 4 amqp / messenger生成pdf

时间:2019-03-15 19:57:36

标签: php rabbitmq symfony4 knp-snappy symfony-messenger

我需要发送一封附有PDF的电子邮件。使用SnappyBundle和Swift Mailer,所有这些操作都非常简单。每当致电../document_name/{id}/mail时,都会生成pdf并发送电子邮件。

为了试图使用户体验更好,我决定用RabbitMQ实现Messenger组件以使此操作排队。但是,这时Snappy有点麻烦了。这是我得到的错误:

The exit status code '1' says something went wrong:
  stderr: "The system cannot find the path specified.
  "
  stdout: ""
  command: ..\vendor\bin\wkhtmltopdf.exe.bat --dpi "300" --image-quality 100 --page-size "A4" --footer-html "C:\Users\user\AppData\Local\Temp\knp_snappy5c8bfb5887e059.82496553.html" --header-html "C:
  \Users\user\AppData\Local\Temp\knp_snappy5c8bfb588a7c92.82567496.html" "C:\Users\user\AppData\Local\Temp\knp_snappy5c8bfb588659c2.24298174.html" "C:\Users\user\AppData\Local\Temp\knp_snappy5c8bfb
  5887d116.94779844.pdf".
  • 如果messenger:consume_messages不使用pdf,则生成pdf并将其发送的服务就可以正常工作。
  • 为了使Swift Mailer在发送$msg->send();之后立即发送电子邮件,并且不将其假脱机到内存中,我在# spool: { type: 'memory' }上将swiftmailer.yml注释掉了,否则电子邮件将不会messenger:consume_messages进行服务时不会发送。

1 个答案:

答案 0 :(得分:0)

不知道它是我的预期行为还是不良做法,但是当进程/命令调用服务时,相对路径不起作用。因此,此解决方案很简单,无需为wkhtmltopdf可执行文件设置相对路径,而是设置绝对路径。看起来像这样:

# .env.local
WKHTMLTOPDF_PATH="../vendor/bin/wkhtmltopdf.exe.bat"
# changed to:
WKHTMLTOPDF_PATH="absolute/bath/to/vendor/bin/wkhtmltopdf.exe.bat"

希望这对某人有帮助