Как заставить драгоценный камень WickedPdf работать на Heroku
(см. Ссылки ниже для ссылок)
- Создайте папку с именем
bin
в корне приложения Rails.
- Загрузите и распакуйте версию 0.9.9 двоичных файлов
wkhtmltopdf
в папку bin
. Вам понадобится версия для вашей системы разработки и версия AMD64 для Heroku. Не добавляйте к вашему git-репо.
- Установите разрешения на выполнение для каждого двоичного файла в папке
bin
, например. chmod +x bin/wkhtmltopdf-amd64
- Сейчас
git add bin
- Добавьте
wicked_pdf
к своим Gemfile
и bundle install
. Никаких других гемов wkhtmltopdf не требуется.
- Создайте файл в папке
config/initializers
с именем wicked_pdf.rb
с исходным кодом ниже.
git commit -am 'added wkhtmltopdf binaries and wicked_pdf gem'
git push heroku
Ваш Rails-проект теперь настроен для Heroku. Отсюда добавьте логику вашей программы для файлов PDF.
** config / initializers / wicked_pdf.rb **
if Rails.env.production?
wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-amd64"
else
# Linux (check your processor for Intel x86 or AMD x64)
# wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-amd64"
# wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-i386"
# OS X
wkhtmltopdf_path = "#{Rails.root}/bin/wkhtmltopdf-0.9.9-OS-X.i386"
# Windows
# wkhtmltopdf_path = 'C:\Program Files/wkhtmltopdf/wkhtmltopdf.exe'
end
WickedPdf.config = { exe_path: wkhtmltopdf_path, wkhtmltopdf: wkhtmltopdf_path }
Как я пришел к такому выводу:
Для начала, в Интернете есть НЕСКОЛЬКО вводящих в заблуждение статей, касающихся wkhtmltopdf
, wicked_pdf
gem и Heroku
.
Существуют также проблемы с последними версиями wkhtmltopdf
(10.0+), из-за которых выполнение зависает.
Наконец, в какой-то момент должно было произойти изменение имен переменных конфигурации для WickedPdf
, поскольку в некоторых статьях упоминается :exe_path
, а в других статьях :wkhtmltopdf
.
Даже документация WickedPdf по GitHub чередуется между каждой переменной.
Мое решение, которое вы делаете , а не , необходимо скомпилировать wkhtmltopdf
из исходного кода.
Вам не необходимо установить wkhtmltopdf
из Homebrew. Я предоставил решение для этого, если вы действительно хотите brew install wkhtmltopdf
.
Вы также не должны добавить какие-либо гемы 'wkhtmltopdf' helper в свой проект. Я пробовал wkhtmltopdf
, wkhtmltopdf-heroku
, wkhtmltopdf-engineyard
, wkhtmltopdf-binary
гемов и репозитории GitHub. Работал отлично в местном масштабе. Не повезло в Героку.
Из консоли Rails на Heroku:
Я выяснил, на каком процессоре работают серверы Heroku, запустив RUBY_PLATFORM
, что привело к "x86_64-linux"
.
Я также заглянул в папку bin
на Heroku, выполнив команду Dir.entries('bin')
, чтобы увидеть, какие файлы там действительно существуют. Я заметил, что некоторые из wkhtmltopdf
гемов, которые я тестировал, поместили свои исполняемые файлы в эту папку. Ключ!
Я запустил WickedPdf.new.pdf_from_string('Hello')
, чтобы увидеть ошибки вывода и протестировать различные конфигурации WickedPdf.
Затем в ответе @ barlow на настройку PDFKit
есть сноска, которая дала окончательный ключ. Вы должны дать Unix разрешения на выполнение wkhtmltopdf
бинарного файла перед фиксацией в Git. Бинго!
Cite:
- Официальные статические двоичные файлы wkhtmltopdf. http://wkhtmltopdf.org/old-downloads.html
- wicked_pdf https://github.com/mileszs/wicked_pdf
- Барлоу PDFKit.config https://stackoverflow.com/a/5098984/307308
- Как установить wkhtmltopdf с помощью Homebrew `https://stackoverflow.com/a/14043085/307308
На момент написания этой статьи:
- рельсы (3.2.13)
- wicked_pdf (0.9.6)
- wkhtmltopdf (0,9,9)
Изменено 2/12/2015
dscout разработал драгоценный камень, который охватывает концепции моего ответа. Я рекомендую использовать гем, если ваш экземпляр Heroku поддерживает buildpacks.
Изменено 3/27/2015
Еще один драгоценный камень, который работает с Heroku (и операционными системами Linux AMD64) wkhtmltopdf-heroku
Он автоматически определяет, установлены ли гемы pdfkit, wicked_pdf и wisepdf.