проблема с реализацией wicked pdf на heroku

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


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

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

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

попробуйте.


как получить wickedpdf gem для работы на Heroku

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

  1. создать папку с именем bin в корне вашего приложения Rails.
  2. скачать и распаковать версии 0.9.9 на wkhtmltopdf двоичные файлы в bin папка. Вам понадобится версия для вашей системы разработки и версия AMD64 для Heroku. Do не добавить к вашему 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 / инициализаторы / 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. Даже документация GitHub WickedPdf чередуется между каждой переменной.

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

цитировать:

  1. официальные статические двоичные файлы wkhtmltopdf legacy 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 разработал камень, который охватывает концепции моего ответа. Я рекомендую использовать gem, если ваш экземпляр Heroku поддерживает buildpacks.

внесены изменения 3/27/2015

еще один драгоценный камень, который работает с Heroku (и Linux AMD64 OSes) wkhtmltopdf-heroku Он автоматически определяет, установлены ли pdfkit, wicked_pdf и wisepdf gems.


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

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

Не забудьте chmod +x вашу копию wkhtmltopdf в вашем РЕПО, прежде чем вы-git добавить его

надеюсь, что это помогает.


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