Злой PDF не работает на сервере. но работал локально. (похоже, не могу найти шаблон) - PullRequest
2 голосов
/ 01 июня 2011

RuntimeError (не удалось сгенерировать PDF! Ошибка: страница загрузки не удалась http://works

Это файл production.log. Я установил, что wkhtmltopdf (0.9.5) установлен на сервереИ укажите путь wkhtmltopdf к файлу инициализации wicked_pdf.

Мне пришлось попробовать два разных способа реализации логики.

отрисовать формат PDF. Как этот

  respond_to do |format|
    format.pdf do
      render :pdf         => "pdf_file_name",
             :template    => 'retailers/scorecard.pdf.erb'
    end
  end  

Или сохраните шаблон в файл и отправьте этот файл пользователю

  file_name = "pdffile.pdf"
  pdf = render_to_string :pdf => file_name, :template    => 'retailers/scorecard.pdf.erb'

  file_path = Rails.root.join("public", "pdfs", file_name) 
  File.open(file_path, 'wb') do |file|
    file << pdf
  end

  send_file file_path

Они оба работают локально, но не работают на сервере. Журнал такой же, как и выше. Единственное, что я могу себе представить, этоМоя ОС Mac, но сервер Ubuntu.

Кстати, я использую wkhtmltopdf в командной строке на сервере. Он работает.

Ответы [ 2 ]

1 голос
/ 01 июня 2011

У вас установлен X-сервер на Ubuntu Box? Wkhtmltopdf зависит от этого или, по крайней мере, от xvfb. Xvfb заменяет графическое окружение для этого конкретного случая.

Если вы хотите использовать xvfb, вы можете сделать следующее:

apt-get install xvfb    
Xvfb :1 -ac -screen 0 640x480x16 &

Строка 2 запускает фрейм-буфер xvfb в фоновом режиме, который может использоваться wkhtmltopdf.

Убедитесь, что вы используете правильную версию (32/64 бит) в зависимости от архитектуры вашей системы!

0 голосов
/ 29 августа 2017

Решение по ОП.

Использовать другой способ

file_name = "example.pdf"
pdf = WickedPdf.new.pdf_from_string(render_to_string('example.pdf.erb'))

  file_path = Rails.root.join("public", "pdfs", file_name) 
  File.open(file_path, 'wb') do |file|
    file << pdf
  end

  send_file file_path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...