Колбу Python 3 установите wkhtmltopdf на героку
У меня проблема с установкой двоичного файла wkhtmltopdf в моем приложении python heroku.
Год назад (python 2) у меня уже была проблема, но я смог ее решить, добавив сначала wkhtmltopdf-pack
к требованиям и установке его на героку, а затем настройку конфига var на WKHTMLTOPDF_BINARY=wkhtmltopdf-pack
, Вот моя старая ветка
Проблема сейчас:
Я пытаюсь использовать тот же подход для Python 3, но ни одна версия wkhtmltopdf-пакета не работает, каждый толчок отклоняется, и я не могу установить его.
Я попробовал эти версии в требованиях:
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
и я помню, как однажды он сказал мне, что был SyntaxError
и это не могло расшифровать что-то.
Альтернативный подход:
Кажется, можно также использовать buildpack, поэтому я попытался добавить buildpack:
heroku buildpacks:add https://github.com/dscout/wkhtmltopdf-buildpack.git
Я вижу, что был добавлен buildpack-пакет, но не было никакой установки, а также нет конфигурации var для wkhtmltopdf. Я не понимаю, как запустить установку, во всех документациях для пакетов сборки написано "добавьте пакет сборки, и вы готовы к работе".
Попытка создать PDF дает мне ошибку сервера здесь:
OSError: No wkhtmltopdf executable found: "b''"
РЕДАКТИРОВАТЬ:
Мне удалось установить buildpack:
Подтверждение прошло успешно, но не было создано никакой конфигурации var, и я понятия не имею, каков путь к двоичному файлу.
РЕДАКТИРОВАТЬ
Мне удалось найти файлы через heroku bash:
app bin dev и т. д. lib lib64 потерян + найден процесс 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")
2 ответа
Я смог решить проблему самостоятельно, следуя моему первому подходу.
Я нашел другой wkhtmltopdf-pack
на pypi и добавил его в мой requirements.txt
:
wkhtmltopdf-pack-ng==0.12.3.0
Heroku смог установить этот пакет.
После этого я добавил конфиг var для wkhtmltopdf:
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")
Это оно.
Лучший подход для установки wkhtmltopdf на Heroku - получить бинарный файл wkhtmltopdf для python 3 вместо wkhtmltopdf-pack, и этого можно добиться с помощью pydf.
Вы можете установить его просто используя pip
лайк:
pip install python-pdf
или для Python 2:
pip install python-pdf==0.30.0
В отличие от подхода, основанного на buildpack, pydf устанавливается с включенным двоичным файлом wkhtmltopdf, что делает его очень простым в использовании, и это правильный подход для Heroku.
Но если вы все еще хотите придерживаться build-pack wkhtmltopdf
Вот еще одно решение, которое вы можете попробовать:
Через: CLI Установка
$ heroku create --buildpack https://github.com/homelight/wkhtmltox-buildpack.git
Или вручную:
Добавьте следующую строку в ваш .buildpacks
файл
https://github.com/homelight/wkhtmltox-buildpack.git
Обратите внимание, что этот buildpack-пакет совместим только со стеком cedar-14. Вы можете использовать стог герою: установите Cedar-14, чтобы установить правильный стек.