проблема реализации злой pdf на героку - PullRequest
17 голосов
/ 16 февраля 2011

Я использую это руководство для интеграции wicked_pdf на heroku. Но почему-то это не похоже на работу. Я получил журналы от Heroku и говорит следующее:

Processing PdfController#get_pdf to pdf (for 115.248.175.50 at 2011-02-15 23:54:44) [GET]
  Parameters: {"format"=>"pdf", "action"=>"get_pdf", "id"=>"1", "controller"=>"pdf"}
***************WICKED***************
Rendering pdf/get_pdf

RuntimeError (PDF could not be generated!
/usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `exec': No such file or directory - /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64       - -  (Errno::ENOENT)
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:73:in `popen3'
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `fork'
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:59:in `popen3'
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `fork'
    from /usr/ruby1.8.7/lib/ruby/1.8/open3.rb:57:in `popen3'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/wicked_pdf.rb:22:in `pdf_from_string'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:28:in `make_pdf'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:39:in `make_and_send_pdf'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/vendor/plugins/wicked_pdf/lib/pdf_helper.rb:13:in `render'
    from /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/app/controllers/schedule_controller.rb:33:in `get_pdf'

Пожалуйста, помогите. Заранее спасибо.

EDIT:

Я сделал некоторые изменения в своем коде и прошел через эту ошибку, но все еще застрял здесь

NoMethodError (undefined method empty? for #<Pathname:0x2b7112392480>)

Ответы [ 4 ]

38 голосов
/ 16 мая 2013

Как заставить драгоценный камень WickedPdf работать на Heroku

(см. Ссылки ниже для ссылок)

  1. Создайте папку с именем bin в корне приложения Rails.
  2. Загрузите и распакуйте версию 0.9.9 двоичных файлов wkhtmltopdf в папку bin. Вам понадобится версия для вашей системы разработки и версия AMD64 для Heroku. Не добавляйте к вашему git-репо.
  3. Установите разрешения на выполнение для каждого двоичного файла в папке bin, например. chmod +x bin/wkhtmltopdf-amd64
  4. Сейчас git add bin
  5. Добавьте wicked_pdf к своим Gemfile и bundle install. Никаких других гемов wkhtmltopdf не требуется.
  6. Создайте файл в папке config/initializers с именем wicked_pdf.rb с исходным кодом ниже.
  7. git commit -am 'added wkhtmltopdf binaries and wicked_pdf gem'
  8. 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:

  1. Официальные статические двоичные файлы wkhtmltopdf. http://wkhtmltopdf.org/old-downloads.html
  2. wicked_pdf https://github.com/mileszs/wicked_pdf
  3. Барлоу PDFKit.config https://stackoverflow.com/a/5098984/307308
  4. Как установить 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.

5 голосов
/ 24 февраля 2011

После просмотра вашей части редактирования, в которой написано "неопределенный метод пуст?"

Это означает, что вы где-то используете пустой? функция на пути объекта в то время как пустой? является функцией строки, а не пути.

попытайтесь выяснить, где вы использовали объект Path и использовать to_s для этого объекта.

Попробуйте.

3 голосов
/ 24 февраля 2011

Если вы добавите локальную копию wkhtmltopdf в репозиторий, вы можете указать на нее в инициализаторе.

PDFKit.configure do |config|
config.wkhtmltopdf = "#{RAILS_ROOT}/lib/wkhtmltopdf"
end

не забудьте chmod + x свою копию wkhtmltopdf в своем репозитории, прежде чем - git добавьте ее

Надеюсь, это поможет.

0 голосов
/ 16 февраля 2011

Ищет двоичный файл wicked_pdf в: /app/fa369291-829b-4b61-9efe-b2f0d0a0a42c/home/bin/wkhtmltopdf-amd64

А его там нет, поместите двоичный файл в папку в вашем приложении, а затем измените файл config/initializers/wicked_pdf.rb, включив в него:

:exe_path => "#{Rails.root}/path/to/wkhtmltopdf-amd64"

Другая проблема, с которой вы можете столкнуться, если wicked_pdf создает файлы, заключается в том, что файловая система Heroku только для чтения, поэтому, если вы не найдете способ указать wicked_pdf создать файлы pdf в каталоге tmp, вы не сможете ее использовать.

...