簡體   English   中英

使用sidekiq,wicked_pdf和haml rails生成PDF 4

[英]Generating PDF using sidekiq, wicked_pdf and haml rails 4

因此,我嘗試使用Sidekiq在后台生成PDF。 我已經按照他們Wiki上的指示進行操作,但是我一直遇到haml格式錯誤。 當我通過常規方法生成相同的pdf模板時,我沒有遇到任何此類haml格式錯誤,並且pdf可以正常生成。 我確定我缺少一些簡單的東西,但是,我只是想不出什么。 代碼如下:

工人代碼:

class GeneratePdf
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform(id)
    @report = Report.find(id)

    av = ActionView::Base.new()
    av.view_paths = ActionController::Base.view_paths

    av.class_eval do
      include Rails.application.routes.url_helpers
      include ApplicationHelper
    end

    pdf = av.render template: 'quarterly_reports/show.pdf.haml',
    locals: {@report => @report}

    pdf = WickedPdf.new.pdf_from_string(
      pdf,
      header: {spacing: 10, html: {template: 'shared/qheader'}},
      footer: {spacing: 10, html: {template: 'shared/qfooter'}}
    )
    save_path = Rails.root.join('public', "PDF-{Time.now.strftime('%Y%m%d')}.pdf")
    File.open(save_path, 'wb') do |file|
      file << pdf
    end
  end
end

因此,當作業觸發時,Sidekiq從頁面的第二行吐出格式錯誤,如下所示:

= wicked_pdf_stylesheet_link_tag "application"
= wicked_pdf_javascript_include_tag "application", "jquery_nested_form", "chartkick"

此后,它顯示了視圖中幾乎每行haml的格式問題。 它不會顯示代碼的第一行(即上面顯示的樣式表鏈接)的問題。 我究竟做錯了什么? 在此先感謝您的幫助!

show.pdf.haml

= wicked_pdf_stylesheet_link_tag "application"
= wicked_pdf_javascript_include_tag "application", "jquery_nested_form", "chartkick"
- @page_title = "Report"
%meta{"http-equiv" => "content-type", "content" => "text/html", "charset" => "utf-8"}
%br
%br
%br
%br
%h2{align: "center"}
    Report
    %br

來自sidekiq的錯誤:

2016-03-16T16:29:06.488Z 22864 TID-ousqdbkxk WARN: SyntaxError: /Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:2: syntax error, unexpected ')', expecting keyword_end
));}\n#{_hamlout.format_script...
 ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:3: syntax error, unexpected tCONSTANT, expecting keyword_end
));}\n", 0, false); @page_title = "Report"
                                         ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:4: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '('
...amlout.push_text("<meta charset='utf-8' content='text/html' ...
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:4: syntax error, unexpected tIDENTIFIER, expecting keyword_end
...("<meta charset='utf-8' content='text/html' http-equiv='cont...
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:4: syntax error, unexpected tIDENTIFIER, expecting keyword_end
...utf-8' content='text/html' http-equiv='content-type'>\n<br>\...
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:4: syntax error, unexpected $undefined
...ml' http-equiv='content-type'>\n<br>\n<br>\n<br>\n<br>\n<h2#{
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:4: syntax error, unexpected $undefined
...tp-equiv='content-type'>\n<br>\n<br>\n<br>\n<br>\n<h2#{
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:4: syntax error, unexpected $undefined
...iv='content-type'>\n<br>\n<br>\n<br>\n<br>\n<h2#{
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:4: syntax error, unexpected $undefined
...ntent-type'>\n<br>\n<br>\n<br>\n<br>\n<h2#{
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:4: syntax error, unexpected $undefined
...type'>\n<br>\n<br>\n<br>\n<br>\n<h2#{
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:9: syntax error, unexpected '}', expecting keyword_end
...utes({}, nil, align: "center")}>\n  Report\n  <br>\n</h2>\n"...
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:9: syntax error, unexpected $undefined
... "center")}>\n  Report\n  <br>\n</h2>\n", 0, false);::Haml::...
...                               ^
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:9: unterminated regexp meets end of file
/Users/user/Sites/cp_reports/app/views/quarterly_reports/show.pdf.haml:9: syntax error, unexpected end-of-input, expecting keyword_end
2016-03-16T16:29:06.489Z 22864 TID-ousqdbkxk WARN: /Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:297:in `module_eval'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:297:in `compile'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:245:in `block (2 levels) in compile!'
/Users/user/.rvm/gems/ruby-2.2.3/gems/activesupport-4.1.10/lib/active_support/notifications.rb:161:in `instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:339:in `instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:244:in `block in compile!'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:232:in `synchronize'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:232:in `compile!'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:144:in `block in render'
/Users/user/.rvm/gems/ruby-2.2.3/gems/activesupport-4.1.10/lib/active_support/notifications.rb:161:in `instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:339:in `instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/template.rb:143:in `render'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/template_renderer.rb:55:in `block (2 levels) in render_template'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/activesupport-4.1.10/lib/active_support/notifications.rb:159:in `block in instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/activesupport-4.1.10/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/activesupport-4.1.10/lib/active_support/notifications.rb:159:in `instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/abstract_renderer.rb:38:in `instrument'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/template_renderer.rb:54:in `block in render_template'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/template_renderer.rb:62:in `render_with_layout'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/template_renderer.rb:53:in `render_template'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/template_renderer.rb:17:in `render'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/renderer.rb:42:in `render_template'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/renderer/renderer.rb:23:in `render'
/Users/user/.rvm/gems/ruby-2.2.3/gems/actionview-4.1.10/lib/action_view/helpers/rendering_helper.rb:32:in `render'
/Users/user/.rvm/gems/ruby-2.2.3/gems/haml-4.0.7/lib/haml/helpers/action_view_mods.rb:12:in `render_with_haml'
/Users/user/Sites/cp_reports/app/workers/generate_pdf.rb:33:in `perform'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:150:in `execute_job'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:132:in `block (2 levels) in process'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:127:in `block in invoke'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/server/active_record.rb:6:in `call'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/server/retry_jobs.rb:74:in `call'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/server/logging.rb:11:in `block in call'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/logging.rb:30:in `with_context'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/server/logging.rb:7:in `call'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:132:in `call'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/middleware/chain.rb:132:in `invoke'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:127:in `block in process'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:166:in `stats'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:126:in `process'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:79:in `process_one'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/processor.rb:67:in `run'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/util.rb:16:in `watchdog'
/Users/user/.rvm/gems/ruby-2.2.3/gems/sidekiq-4.0.1/lib/sidekiq/util.rb:24:in `block in safe_thread'

通過cli單步執行渲染后。 我注意到該錯誤畢竟與haml無關。 當我在render中呼叫本地人時,我的符號錯誤。 我改變了這個:

pdf = av.render template: 'quarterly_reports/show.pdf.haml',
locals: {@report => @report}

為此:

pdf = av.render template: 'quarterly_reports/show.pdf.haml',
locals: {:@report => @report}

現在一切都按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM