Колбу 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, чтобы установить правильный стек.

Другие вопросы по тегам