在我的heroku python应用程序(flask)上安装wkhtmltopdf二进制文件时遇到了一个问题。在
一年前(Python2)我已经遇到了一个问题,但是我能够解决这个问题,方法是首先将wkhtmltopdf-pack
添加到需求中,并将其安装在heroku上,然后将config var设置为WKHTMLTOPDF_BINARY=wkhtmltopdf-pack
。这是我以前的thread
现在的问题:
我试图对python3使用相同的方法,但是wkhtmltoppdf包的版本都不起作用,每次推送都会被拒绝,我无法安装它。在
我在需求中尝试了这些版本:
wkhtmltopdf-pack==0.12.5
wkhtmltopdf-pack==0.12.4
wkhtmltopdf-pack==0.12.3
wkhtmltopdf-pack==0.12.3.0.post1
wkhtmltopdf-pack==0.12.2.4
我得到这些错误:
^{pr2}$或者
error: can't copy 'bin/wkhtmltopdf-pack': doesn't exist or not a regular file
我记得有一次它告诉我有一个SyntaxError
,它不能解码什么东西。在
替代方法:
似乎也可以使用buildpack,所以我尝试添加buildpack:
heroku buildpacks:add https://github.com/dscout/wkhtmltopdf-buildpack.git
我看到buildpack已经添加,但是没有安装,wkhtmltopdf也没有配置变量。我不知道如何触发安装,在所有的buildpacks文档中都写着“添加buildpack,你就可以开始了”。在
尝试创建PDF时,此处出现服务器错误:
OSError: No wkhtmltopdf executable found: "b''"
编辑:
我成功安装了buildpack:
推送是成功的,但是没有创建配置变量,我也不知道二进制文件的路径是什么。在
编辑
我可以通过heroku bash找到文件:
app bin dev etc lib64丢失+找到proc sbin sys tmp usr var
/ $ cd app
~ $ cd vendor
~/vendor $ dir
wkhtmltox
~/vendor $ cd wkhtmltox
~/vendor/wkhtmltox $ dir
lib
~/vendor/wkhtmltox $ cd lib
~/vendor/wkhtmltox/lib $ dir
libwkhtmltox.so libwkhtmltox.so.0 libwkhtmltox.so.0.12 libwkhtmltox.so.0.12.3
~/vendor/wkhtmltox/lib $ exit
现在我尝试了所有这些文件,但都给出了一个错误:
OSError: wkhtmltopdf exited with non-zero code -11. error
下面是我如何设置路径:
# WKHTMLTOPDF config
if 'DYNO' in os.environ:
print ('loading wkhtmltopdf path on heroku')
MYDIR = os.path.dirname(__file__)
WKHTMLTOPDF_CMD = os.path.join(MYDIR + "/vendor/wkhtmltox/lib/", "libwkhtmltox.so")
else:
print ('loading wkhtmltopdf path on localhost')
MYDIR = os.path.dirname(__file__)
WKHTMLTOPDF_CMD = os.path.join(MYDIR + "/static/executables/bin/", "wkhtmltopdf.exe")
按照我的第一种方法,我自己解决了这个问题。在
我在pypi上发现了另一个
wkhtmltopdf-pack
,并将其添加到我的requirements.txt
:Heroku能够安装这个包。在
之后,我为wkhtmltopdf添加了配置变量:
^{pr2}$安装现已完成。我现在需要在我的应用程序上使用正确的路径:
就这样。在
在Heroku上安装wkhtmltopfd的最佳方法是获取python3的wkhtmltoppdf二进制文件,而不是wkhtmltoppdf包,您可以使用pydf来实现这一点。在
您可以简单地使用
pip
进行安装,如:或者对于Python 2:
^{pr2}$与基于buildpack的方法不同,pydf安装时包含wkhtmltopf二进制文件,使用起来非常容易,这是Heroku的正确方法。在
但是如果您仍然想坚持使用
build-pack wkhtmltopdf
,下面是另一个解决方案,您可以尝试一下:通过:CLI安装
或手动:
将以下行添加到
.buildpacks
文件中https://github.com/homelight/wkhtmltox-buildpack.git
请注意,此buildpack仅与cedar-14堆栈兼容。你可以用heroku堆叠:设置雪松-14设置正确的堆栈。在
相关问题 更多 >
编程相关推荐