Python 3 flask在Heroku上安装wkhtmltopdf

时间:2018-10-09 12:37:42

标签: python python-3.x heroku wkhtmltopdf

在我的heroku python应用程序(烧瓶)上安装wkhtmltopdf二进制文件时出现问题。

一年前(python 2),我已经遇到了问题,但是我可以通过以下方式解决此问题:首先将wkhtmltopdf-pack添加到需求中并将其安装在heroku上,然后将config var设置为{{1 }}。这是我的旧thread

现在的问题:

我正在尝试对python 3使用相同的方法,但是wkhtmltopdf-pack的任何版本均无效,每次推送都被拒绝,我无法安装。

我在要求中尝试了以下版本:

WKHTMLTOPDF_BINARY=wkhtmltopdf-pack

我得到这些错误:

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

No matching distribution

我记得曾经有一次error: can't copy 'bin/wkhtmltopdf-pack': doesn't exist or not a regular file 告诉我,它无法解码某些内容。

替代方法:

似乎也可以使用buildpack,所以我尝试添加一个buildpack:

SyntaxError

我看到已经添加了buildpack,但是没有安装,也没有wkhtmltopdf的配置变量。我不明白如何触发安装,在所有关于buildpack的文档中,其写为​​“添加buildpack,您就可以开始了”。

尝试创建PDF会给我一个服务器错误,在这里:

heroku buildpacks:add https://github.com/dscout/wkhtmltopdf-buildpack.git

编辑:

我设法安装了buildpack:

enter image description here

推送成功,但是没有创建config var,我也不知道二进制文件的路径是什么。

编辑

我能够通过heroku bash查找文件:

app bin dev etc lib lib64 lost + found proc sbin sys tmp usr var

OSError: No wkhtmltopdf executable found: "b''"

现在我尝试了所有这些文件,但都给出了错误:

/ $ 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

2 个答案:

答案 0 :(得分:3)

通过获取用于python 3的wkhtmltopdf二进制文件而不是wkhtmltopdf-pack来在Heroku上安装wkhtmltopdf的最佳方法,您可以使用pydf来实现。

您可以像使用private static void ensureConnection() { var configOptions = new StackExchange.Redis.ConfigurationOptions { ConnectTimeout = 5000, ConnectRetry = 5, SyncTimeout = 5000, AbortOnConnectFail = false, }; configOptions.EndPoints.Add(host, port); var conn = StackExchange.Redis.ConnectionMultiplexer.Connect(configOptions); redisConn = conn; } 一样简单地安装它:

pip

Python 2

pip install python-pdf

与基于buildpack的方法pydf一起安装的wkhtmltopdf二进制文件非常易于使用,这是Heroku的正确方法。

但是,如果您仍然想坚持使用pip install python-pdf==0.30.0 ,则可以尝试以下另一种解决方法:

通过:CLI安装

build-pack wkhtmltopdf

或手动:

将以下行添加到您的$ heroku create --buildpack https://github.com/homelight/wkhtmltox-buildpack.git 文件中

https://github.com/homelight/wkhtmltox-buildpack.git

请注意,此buildpack仅与cedar-14堆栈兼容。您可以使用heroku stack:set cedar-14设置正确的堆栈。

答案 1 :(得分:1)

按照第一种方法,我能够自行解决问题。

我在pypi上找到了另一个wkhtmltopdf-pack,并将其添加到我的requirements.txt

wkhtmltopdf-pack-ng==0.12.3.0

Heroku能够安装此软件包。

之后,我为wkhtmltopdf添加了config var:

heroku config:set WKHTMLTOPDF_BINARY=wkhtmltopdf-pack

安装现已完成。我现在需要在我的应用上使用正确的路径:

if 'DYNO' in os.environ:
    print ('loading wkhtmltopdf path on heroku')
    WKHTMLTOPDF_CMD = subprocess.Popen(
        ['which', os.environ.get('WKHTMLTOPDF_BINARY', 'wkhtmltopdf-pack')], # Note we default to 'wkhtmltopdf' as the binary name
        stdout=subprocess.PIPE).communicate()[0].strip()
else:
    print ('loading wkhtmltopdf path on localhost')
    MYDIR = os.path.dirname(__file__)    
    WKHTMLTOPDF_CMD = os.path.join(MYDIR + "/static/executables/bin/", "wkhtmltopdf.exe")

就这样。