Проблема внедрения злого 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>)
Ответы
Ответ 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, вы, возможно, не сможете его использовать.