这里是我的情况,我在我的Ubuntu上为一个基于laravel框架的php项目安装了laravel-snappy,这是wkhtmltopdf的包装器。我需要将html转换成pdf并通过电子邮件发送,所以我实际上使用了一个包装wkhtmltopdf,称为laravel-snappy。
但我必须解决的第一个问题是,snappy在我的ubuntu系统上找错了目录,所以我创建了一个指向它所要查找的位置的符号链接,从而使它工作起来:sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltodpf现在在我的本地服务器上正常工作。
但是,当我将应用程序部署到heroku (雪松-14堆栈)上时,它不起作用,下面是我收到的错误消息(与我笔记本上的实际情况相同):
Apr 13 18:24:37 luckey app/web.1: stderr: "sh: 1: **/usr/local/bin/wkhtmltopdf: not found**
然后我天真地尝试去做:heroku run "sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf" --app luckey-dev
Running sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf on luckey-dev... starting, run.4999 Running sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf on luckey-dev... connecting, run.499 Running sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf on luckey-dev... up, run.4999 bash: **sudo: command not found**
然后:heroku run "ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf" --app luckey-dev
Running ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf on luckey-dev... up, run.5658 ln: failed to create symbolic link '/usr/local/bin/wkhtmltopdf': **Read-only file system**
我想知道在Procfile中添加这个文件是否有效:当您输入自己的名称时,system: sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf似乎将作为一个辅助进程类型启动。
问题是,我知道它是通过多个buildpack配置正确安装的,因为我可以看到服务器上的版本:
heroku run "wkhtmltopdf -V" --app luckey-dev Running wkhtmltopdf -V on luckey-dev... up, run.3446 wkhtmltopdf 0.12.2.1 (with patched qt)
所以,如果我能够让heroku使用正确的二进制文件位置,或者告诉Snappy在不查找二进制路径的情况下执行wkhtmltopdf,因为如果我只需键入执行wkhtmltopdf -V就可以得到它的版本,那么别名wkhtmltopdf的创建似乎是正确的。
如有任何建议/想法,将不胜感激:)
发布于 2016-04-15 07:54:22
最后,我找到了解决这个问题的办法:
首先,我们必须用barryvdh包装器的laravel-snappy来编辑snappy.php文件以供我们自己使用:<?php return array( 'pdf' => array( 'enabled' => true, 'binary' => '/usr/local/bin/wkhtmltopdf', 'timeout' => false, 'options' => array(), 'env' => array(), ), 'image' => array( 'enabled' => true, 'binary' => '/usr/local/bin/wkhtmltopdf', 'timeout' => false, 'options' => array(), 'env' => array(), ), );。
与heroku,我无法创建符号链接,所以我停止寻找一种方式。
解决方案1:'Meh'然后我尝试使pdf对象的二进制值与heroku上wkhtmltopdf的二进制位置匹配。我可以使用以下命令来完成:heroku run "type -a wkhtmltopdf " --app luckey-dev Running type -a wkhtmltopdf on luckey-dev... up, run.5547 wkhtmltopdf is /app/bin/wkhtmltopdf
然后编辑snappy.php文件上的二进制值:'binary' => '/app/bin/wkhtmltopdf'
解决方案2:“更好的方法”:解决方案1可以作为解决方案(而且它可以工作),以给出这个位置的二进制值。但还有一个更好的解决方案:'binary' => 'wkhtmltopdf' Yup,简单明了,只需给出别名.Heroku会知道从哪里弄到它..。只需确保您在Heroku中的wkhtmltopdf buildpack安装良好,这要归功于以下命令:heroku run "wkhtmltopdf -V" --app appName
为了记录在案,我还有其他问题,因为我试图转换为pdf的html文件中有一些来自另一个域的css文件。然后得到这个错误Exit with code 1 due to network error: ContentNotFoundError。要解决这个问题,您需要在html文件上添加一个基标记,那么所有与资产相关的url都将基于这个基标记href:<base href="https://yourProductionDomain/">。
我很高兴我能成功。希望这也能帮到别人。
梅图克斯。
https://stackoverflow.com/questions/36617165
复制相似问题