Фон
После прочтения мне показалось, что Prawn отсутствует и wkhtmltopdf. Это также похоже на PDFKit и wicked_pdf gems для Rails - новый классный. Поэтому я нашел screencast Ryan на как использовать PDFKit, Я установил все, протестировал wkhtmltopdf на CLI без проблем, возился с настройками Rails, чтобы запускать несколько процессов, так что конвейер активов работает, и все было хорошо, за исключением того, что я все еще застрял в самом конце процесса (фактически получая PDF файл ответ от сервера).
Вопрос
Когда я запрашиваю версию моего представления .pdf
(я использую опцию PDFKit Middleware), мой браузер просто сидит там, ожидая ответа, но как только я убью процесс Rails, я ожидал получить только PDF файл затем появляется в моем окне браузера. Что дает?
Что я использую
- ОС: OSX 10.8.1
- Rails: 3.2.8
- Ruby: 1.9.3
- wkhtmltopdf: 0.11.0_rc1 (хотя, когда я запускаю
wkhtmltopdf -V
, он говорит 0.10.0_rc2) - qt: 4.8.2
Что я сделал
- использовал промежуточное программное обеспечение PDFKit, загрузив
config.middleware.use "PDFKit::Middleware"
в мой файлapplication.rb
. - включил
gem 'pdfkit'
в мой Gemfile и установил его с помощью Bundler - установите mime-тип
.pdf
в моем инициализатореmime_types.rb
с помощьюMime::Type.register_alias "application/pdf", :pdf
- добавлено
config.threadsafe!
вconfig/environments/development.rb
для нескольких потоков, поэтому конвейер ресурсов не конфликтует с движком PDF - протестирован
wkhtmltopdf http://www.google.com google.pdf
, и он сгенерировал PDF файл главной страницы Google, как ожидалось - попробовал обмен PDFKit для wicked_pdf и столкнулся с той же проблемой (зависание, но когда Rails-процесс был убит, PDF отображается как ожидалось)
Что это выглядит
Это обычная html-страница, созданная Rails (я размыл детали клиента):
Это результат CLI, созданный Rails, когда я пытаюсь перейти к localhost:3000/some/path.pdf
. (приложение висит во время ожидания ответа):
Когда я окончательно уничтожу процесс Rails с помощью ctrl-c
, PDF, наконец, появится в браузере, как я ожидал увидеть (CSS и HTML отображаются правильно, поэтому активы, похоже, загружаются нормально):
Выводы до сих пор
Обмен PDFKit для wicked_pdf и получение тех же результатов, кажется, заставляет меня думать, что проблема не в этих библиотеках, а что-то с моей средой разработки. Но wkhtmltopdf отлично справляется с командной строкой, поэтому мне кажется, что он и QT выполняют свою работу. Проблема должна быть в Rails. Может быть, я не настраиваю что-то должным образом?
Обращение за помощью
Как определить, в чем проблема, и как ее исправить?
Я буду любить тебя, если ты поможешь мне < 3
Update
Я также попытался использовать альтернативный метод рендеринга PDF (с .to_pdf
) без опции промежуточного программного обеспечения, как описано ниже (делая это, я прокомментировал config.middleware.use "PDFKit::Middleware"
из моего файла application.rb
):
respond_to do |format|
format.html
format.pdf do
html = '<html><body>This is a test.</body></html>'
@pdf = PDFKit.new(html)
send_data @pdf.to_pdf,
:filename => 'whatever.pdf',
:type => 'application/pdf',
:disposition => 'attachment'
end
end