Heroku - wkhtmltopdf - laravel-snappy:生产服务器上的错误路径

时间:2016-04-14 08:07:54

标签: laravel heroku wkhtmltopdf

这是我的情况,我在我的Ubuntu上安装了laravel-snappy,这是一个基于laravel框架的php项目的wkhtmltopdf包装器。 我需要将html>转换为pdf并通过电子邮件发送,所以我实际上使用了一个名为laravel-snappy的wkhtmltopdf包装器。

但是我必须解决的第一个问题是,snappy正在查看我的ubuntu系统上的错误目录,所以我通过创建一个符号链接到它所寻找的位置来实现它: sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltodpf 现在它在我的本地服务器上工作正常。

但是当我在heroku(cedar-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似乎正确创建,如果我能得到它的版本只是输入执行wkhtmltopdf -V。

任何建议/想法将不胜感激:)

1 个答案:

答案 0 :(得分:1)

最后我找到了解决这个问题的方法:

首先我们必须分叉barryvdh的lapervel-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:'嗯' 然后我尝试使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' 是的,直截了当,只是给别名... Heroku会知道从哪里得到它...只要确保你的whtmltopdf buildpacks在Heroku中安装得很好,这要归功于这个命令: 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/">

我很高兴我能做到这一点。 希望这也可以帮助其他人。

Metux。