PDFKit, TypeError Не удается преобразовать хэш в строку

Я использую PDFKit с его Middlware для рендеринга HTML в формате PDF, но у него по-прежнему возникает ошибка типа, когда я пытаюсь перейти на localhost: 3000/booklets/1.pdf

can't convert Hash into String

Пишет, что ошибка в BookletsController#show. Это отрывок из моего booklets_controller.rb

  def show
    @booklet = Booklet.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.pdf {
        html = render_to_string(:action => "show.html.erb", :formats => [:html])
        kit = PDFKit.new(html)
        send_data(kit.to_pdf, :filename => "booklet.pdf", :type => 'application/pdf')
      return
      }
    end
  end

environnment.rb

# Initialize the rails application
Ziin::Application.initialize!

Mime::Type.register "application/pdf", :pdf

выдержка из application.rb

require 'pdfkit'
config.middleware.use "PDFKit::Middleware"

PDFKit.configure do |config|
    config.wkhtmltopdf = { :exe_path => '/usr/local/bin/wkhtmltopdf' }
end

person Eric Hu    schedule 01.02.2013    source источник
comment
Ошибка, кажется, исходит от вызова render_to_string. У вас есть трассировка стека? кроме того, я предлагаю вам попробовать запустить ваш сервер rails в режиме отладки (rails s --debugger) и попытаться следовать потоку кода. Вот ссылка для начала отладки приложений rails: guides.rubyonrails .org/   -  person Sjors Branderhorst    schedule 01.02.2013


Ответы (1)


Проблема заключается в указанном вами пути выполнения. Я только что воспроизвел проблему на своей машине (ubuntu 12.04) и исправил ее, НЕ используя гем для установки wkhtmltopdf, который добавляет некоторую версию wkhtmltopdf, которая не работает.

1.) Посмотрите здесь, как установить wkhtmltopdf (версия без драгоценных камней) https://github.com/pdfkit/pdfkit/wiki/Installing-WKHTMLTOPDF

2.) Удалите «wkhtmltopdf» из вашего файла gem

3.) Найдите исполняемый файл wkhtmltopdf, выполнив «what wkhtmltopdf». Используйте путь, возвращаемый в объявлении exe_path.

4.) Не знаю, имеет ли значение следующий шаг, но я перешел:

PDFKit.configure сделать |config| config.wkhtmltopdf = { :exe_path => "#{ПУТЬ}" конец

в config/initializers/pdfkit.rb

  • также удалите драгоценный камень с помощью 'gem uninstall wkhtmltopdf'
person Kevin Huynh    schedule 02.02.2013