Мне очень трудно получить PDFKit для работы на Heroku. Я прочитал учебники, найденные here, here и here, но все еще не могу понять, как правильно получить pdf. У меня такая же проблема, описанная в предыдущих ссылках, где приложение отлично работает в разработке и зависает в производстве на Heroku. Я попытался добавить следующее (полученное из учебников).PDFKit на Heroku с Rails 3.2.13 и Bootstrap
application_helper.rb
def request_from_pdfkit?
# when generating a PDF, PDFKit::Middleware will set this flag
request.env["Rack-Middleware-PDFKit"] == "true"
end
# We have to reference the actual output of the assets pipeline, which according
# to http://guides.rubyonrails.org/asset_pipeline.html is application-<md5>.css and
# application-<md5>.js. We have to dynamically find these file names and correctly
# reference them.
def get_mdf5_file(base_file)
stripped_name = base_file.basename.to_s.gsub(base_file.extname, "")
Dir.glob("#{base_file.parent}/*#{base_file.extname}").each do |file|
return file if file.match(/#{stripped_name}-[\d\w]+#{base_file.extname}/)
end
return base_file
end
application.html.erb
<% if request_from_pdfkit? %>
<style type="text/css" media="all">
<%= File.read(get_mdf5_file(Rails.root.join("public","assets","application.css")) %>
</style>
<script type="text/javascript">
<%= File.read(get_mdf5_file(Rails.root.join("public","assets","application.js"))) %>
</style>
<% else %>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= javascript_include_tag "application" %>
<% end %>
Когда я делаю это ПРВ сгенерированные имеют минимальный стиль и отсутствие контента, созданного с помощью JavaScript. Было бы (по моей догадке), что ни один из сценариев Bootstrap не будет предварительно скомпилирован в application.css. Сейчас, вот содержимое
application.css
/*
*= require_self
*= require dataTables/jquery.dataTables
*= require dataTables/jquery.dataTables.bootstrap
*= require dataTables/src/demo_table_jui
*= require jquery.ui.all
*= require jquery.jqplot
*= require_tree .
*/
application.js
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require bootstrap
//= require bootstrap-multiselect
//= require dataTables/jquery.dataTables
//= require dataTables/jquery.dataTables.bootstrap
//= require jquery.jqplot
//= require plugins/jqplot.cursor
//= require plugins/jqplot.BezierCurveRenderer
//= require plugins/jqplot.bubbleRenderer
//= require plugins/jqplot.barRenderer
//= require plugins/jqplot.categoryAxisRenderer
//= require plugins/jqplot.canvasTextRenderer
//= require plugins/jqplot.canvasAxisLabelRenderer
//= require plugins/jqplot.highlighter
//= require plugins/jqplot.canvasOverlay
//= require plugins/jqplot.cursor
//= require plugins/jqplot.enhancedLegendRenderer
//= require plugins/jqplot.dateAxisRenderer
//= require plugins/jqplot.canvasAxisTickRenderer
//= require_tree .
Я пытался добавить некоторые компоненты Bootstrap SCSS вручную к трубопроводу application.css активов, но получил ошибка указана here.
Я в затруднении, как заставить это работать, поэтому любая помощь будет оценена по достоинству.
EDIT
Я играл с этим много и заметил, что, когда Javascript и CSS вставлены рядный, все кавычки "заменяются " в зависимости от источника, указанного на Chrome. Я попробовали добавить .gsub (/ " /,/"/), но это не сработало. Кто-нибудь знает, почему я вижу " вместо», или, если это даже вопрос.
EDIT 2
Я был в состоянии получить дисплей выглядеть немного лучше, реализовав следующие изменения
<script type="text/javascript">
<%= raw(File.read(get_mdf5_file(Rails.root.join("public", "assets", "application.js"))).gsub("</script>", "")) %>
</script>
<style type="text/css" media="all">
<%= raw File.read(get_mdf5_file(Rails.root.join("public", "assets", "application.css"))) %>
</style>
однако стиль все еще перепутались, поэтому я до сих пор охота для решения.
+ 1 миллиона точек, и, если я когда-нибудь увидеть вас лично, объятие, за возвращение и отвечать на свои собственные вопрос! :-D –