Heroku - wkhtmltopdf - laravel-snappy:生产服务器上的路径错误
Heroku - wkhtmltopdf - laravel-snappy : wrong path on production server
这是我的情况,我在我的 Ubuntu 上安装了 laravel-snappy,它是 wkhtmltopdf 的包装器,用于基于 [=] 的 php 项目57=] 框架。
我需要将 html 转换为 pdf 并通过电子邮件发送它们,所以我实际上使用了一个名为 laravel-snappy 的 wkhtmltopdf 包装器。
但我必须解决的第一个问题是 snappy 在我的 ubuntu 系统上查找了错误的目录,所以我通过在它查找的位置创建一个 symlink 使其工作为了:
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 运行 "sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf" --app luckey-dev<br>
运行 sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf 在 luckey-dev 上...开始,运行.4999
运行 sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf 在 luckey-dev 上...正在连接,运行.499
运行 sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf on luckey-dev...up, 运行.4999
bash: **sudo: 找不到命令**
然后:
heroku 运行 "ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf" --app luckey-dev<br>
运行 ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf on luckey-dev...up, 运行.5658
ln: 未能创建符号 link '/usr/local/bin/wkhtmltopdf': **只读文件系统**
我想知道在 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.
获得它的版本,则正确创建
任何建议/想法将不胜感激:)
最后我找到了解决这个问题的办法:
首先,我们必须 fork 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 我无法创建符号链接,所以我不再寻找一种方法。
方案一:'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:'way better':解决方案 1 可能是解决方案(并且有效),为该位置提供二进制值。但还有更好的解决方案:
'binary' => 'wkhtmltopdf'
是的,直截了当,只需提供别名...Heroku 将知道从哪里获得它...只需确保您的 wkhtmltopdf 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.
这是我的情况,我在我的 Ubuntu 上安装了 laravel-snappy,它是 wkhtmltopdf 的包装器,用于基于 [=] 的 php 项目57=] 框架。 我需要将 html 转换为 pdf 并通过电子邮件发送它们,所以我实际上使用了一个名为 laravel-snappy 的 wkhtmltopdf 包装器。
但我必须解决的第一个问题是 snappy 在我的 ubuntu 系统上查找了错误的目录,所以我通过在它查找的位置创建一个 symlink 使其工作为了:
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 运行 "sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf" --app luckey-dev<br>
运行 sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf 在 luckey-dev 上...开始,运行.4999
运行 sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf 在 luckey-dev 上...正在连接,运行.499
运行 sudo ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf on luckey-dev...up, 运行.4999
bash: **sudo: 找不到命令**
然后:
heroku 运行 "ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf" --app luckey-dev<br>
运行 ln -s /usr/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf on luckey-dev...up, 运行.5658
ln: 未能创建符号 link '/usr/local/bin/wkhtmltopdf': **只读文件系统**
我想知道在 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.
获得它的版本,则正确创建任何建议/想法将不胜感激:)
最后我找到了解决这个问题的办法:
首先,我们必须 fork 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 我无法创建符号链接,所以我不再寻找一种方法。
方案一:'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:'way better':解决方案 1 可能是解决方案(并且有效),为该位置提供二进制值。但还有更好的解决方案:
'binary' => 'wkhtmltopdf'
是的,直截了当,只需提供别名...Heroku 将知道从哪里获得它...只需确保您的 wkhtmltopdf 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.