在我的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:
推送成功,但是没有创建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
答案 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")
就这样。