Подтвердить что ты не робот

Проблема внедрения злого pdf на герою

Я использую это руководство для интеграции wicked_pdf на 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'

Пожалуйста, помогите. Спасибо в Advance.

EDIT:

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

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

4b9b3361

Ответ 1

Посмотрев на свою часть редактирования, в которой говорится: "undefined метод пуст? для #<Pathname:0x2b...>

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

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

Попробуйте.

Ответ 2

Как заставить WickedPdf работать на Heroku

(см. ссылку ниже для URL-адресов)

  • Создайте папку с именем 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 и Heroku. Также есть проблемы с последними версиями wkhtmltopdf (10.0+), которые заставляют выполнение зависать.

Наконец, в какой-то момент должно было произойти изменение имен конфигурационных переменных для WickedPdf, поскольку в нескольких статьях ссылаются :exe_path, а в других статьях ссылаются :wkhtmltopdf. Даже документация WickedPdf GitHub чередуется между каждой переменной.

Мое решение вам не нужно компилировать wkhtmltopdf из источника. Вам не нужно устанавливать wkhtmltopdf из Homebrew. Я решил это, если вы действительно хотите brew install wkhtmltopdf. Вам также не нужно добавлять в проект какие-либо вспомогательные жемчужины "wkhtmltopdf". Я попробовал 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:

На момент написания этой статьи:

  • рельсы (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.

Ответ 3

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

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

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

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

Ответ 4

Ищет двоичный файл 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, вы, возможно, не сможете его использовать.