首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Heroku - wkhtmltopdf - laravel-snappy :生产服务器上的错误路径

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

Stack Overflow用户
提问于 2016-04-14 08:07:53
回答 1查看 2.7K关注 0票数 1

这里是我的情况,我在我的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的创建似乎是正确的。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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/">

我很高兴我能成功。希望这也能帮到别人。

梅图克斯。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36617165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档