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

17

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

задан Rohit 16.02.2011 в 09:07
источник

4 ответа

5

Посмотрев на свою часть редактирования, в которой говорится: «undefined method empty? for #<Pathname:0x2b...>

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

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

Попробуйте.

    
ответ дан rohit pal 24.02.2011 в 10:07
источник
  • вы можете ссылаться на ruby-doc.org/core/classes/String.html и ruby-doc.org/stdlib/libdoc/pathname/rdoc/index.html –  rohit pal 24.02.2011 в 10:12
  • Спасибо, собственно, в файле конфигурации wicked_pdf я использовал Rails.root.join ('bin', 'wkhtmltopdf-amd64'), и это давало мне объект PATH, добавленный to_s к нему, и он работал –  Rohit 28.02.2011 в 09:27
34

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

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

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

Проект 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 }

Как я пришел к такому выводу:

Во-первых, в Интернете есть несколько вводящих в заблуждение статей относительно git push heroku , wkhtmltopdf gem и wicked_pdf . Также есть проблемы с последними версиями Heroku (10.0+), которые заставляют выполнение зависать.

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

Мое решение, которое вы выполняете not , необходимо скомпилировать :wkhtmltopdf из источника. Вам нужно not установить wkhtmltopdf из Homebrew. Я решил это, если вы действительно хотите wkhtmltopdf . Вы также можете not добавить в проект какой-либо из 'wkhtmltopdf' хелпер . Я пробовал brew install wkhtmltopdf , wkhtmltopdf , wkhtmltopdf-heroku , wkhtmltopdf-engineyard gems и репозитории GitHub. Работал отлично на месте. В Хероку не повезло.

Из консоли Rails на Heroku: Я исследовал, какой процессор работал на серверах Heroku, запустив wkhtmltopdf-binary , что дало RUBY_PLATFORM . Я также заглянул в папку "x86_64-linux" на Heroku, выпустив bin , чтобы увидеть, какие файлы на самом деле там существуют. Я заметил, что некоторые из Dir.entries('bin') gems, которые я тестировал, размещали их исполняемые файлы в этой папке. Ключ! Я выполнил wkhtmltopdf , чтобы увидеть ошибки вывода и протестировать различные конфигурации WickedPdf.

Затем, в ответе @ barlow на настройку WickedPdf.new.pdf_from_string('Hello') , есть субнома, которая дала окончательный ключ. Вы должны предоставить Unix разрешения на выполнение для PDFKit двоичного кода перед тем, как совершить Git. Бинго!

Cite:

  1. Официальный wkhtmltopdf устаревшие статические двоичные файлы Ссылка
  2. wicked_pdf Ссылка
  3. PDFKit.config Barlow's Ссылка
  4. Как установить wkhtmltopdf с помощью Homebrew ' Ссылка

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

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

    
ответ дан scarver2 16.05.2013 в 03:36
источник
  • Четкий, краткий ответ. Работала в первый раз для меня. Большое спасибо. –  Eoin Kelly 23.07.2013 в 07:34
  • В качестве обновления используется первый обработанный в Heroku первый: Rails 4.1.6, wicked_pdf 0.11.0 и wkhtmltopdf-binary 0.9.9.3 –  Craig McGuff 15.01.2015 в 10:15
  • Как вы получили двоичный код AMD64? Все, что я вижу, это пакеты Linux. Я извлек архив .deb, и похоже, что есть связанные зависимости, а не все инклюзивные автономные двоичные файлы. –  Dex 11.02.2015 в 22:34
  • @Dex Спасибо за то, что привлек это к моему вниманию. Статика была перенесена в это место: wkhtmltopdf.org/old-downloads.html Я обновил ссылку на новый URL 2/11/2015. –  scarver2 11.02.2015 в 23:04
  • Спасибо за это. Я просто попытался использовать этот сборник и, похоже, работает: github.com/dscout/wkhtmltopdf-buildpack –  Dex 11.02.2015 в 23:19
Показать остальные комментарии
3

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

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

помните chmod + x свою копию wkhtmltopdf в своем репо перед вами - git add it

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

    
ответ дан David Barlow 24.02.2011 в 01:18
источник
  • Привет @Barlow Я не использую PDFKit. Пожалуйста, прочитайте вопрос. –  Rohit 24.02.2011 в 06:06
  • Извините, поэтому используется для использования PDFkit. Я вижу wkhtmltopdf, и я сразу думаю, что PDFkit, –  David Barlow 24.02.2011 в 06:24
  • Возможно, PDFkit - это ответ, который вы действительно ищете? –  David Barlow 24.02.2011 в 06:24
  • Нет, мне нужно использовать wicked_pdf :) –  Rohit 24.02.2011 в 07:37
0

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

ответ дан Fernando Diaz Garrido 16.02.2011 в 10:10
источник
  • Спасибо. Но я уже сделал, что двоичный файл существует в моем RAILS_ROOT / bin / и в config / initializers / wicked_pdf.rb. Я указал: exe_path => Rails.root.join ('bin', 'wkhtmltopdf-amd64'). To_s но он все еще не работает –  Rohit 16.02.2011 в 11:52
  • все еще такая же ошибка? –  Fernando Diaz Garrido 16.02.2011 в 11:57
  • yep все тот же :( –  Rohit 16.02.2011 в 13:15
  • Ваш ответ кажется законным. Может быть, это что-то типа платформы двоичного? Я запустил RUBY_PLATFORM с консоли Heroku и получил => «x86_64-linux» в качестве ответа. –  scarver2 15.05.2013 в 15:54