这是我的情况,我在我的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。
任何建议/想法将不胜感激:)
答案 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。