【问题标题】:undefined method `start_with?' for nil:NilClass未定义的方法“start_with?”对于零:NilClass
【发布时间】:2016-06-05 12:14:24
【问题描述】:

chartkickwicked-pdf 一起使用。

app/layout/pdf.html.erb

<!doctype html>
<html>
<head>
 <meta charset='utf-8' />
 <%= wicked_pdf_stylesheet_link_tag 'application', media: 'all' %>
 <%= wicked_pdf_javascript_include_tag 'application', 'data-turbolinks-track' => true %>
 <%= javascript_include_tag "http://www.google.com/jsapi"%>
 <%= wicked_pdf_javascript_include_tag 'chartkick'%>
 </head>
 <body onload='number_pages'>
 <div id="header">
  <h2>Report</h2>
</div>
<div id="content">
  <%= yield %>
</div>

但它在这条线上给出了一个错误

<%= wicked_pdf_stylesheet_link_tag 'application', media: 'all' %>

错误

  undefined method `start_with?' for nil:NilClass

我如何删除它? 错误

ActionView::Template::Error (undefined method `start_with?' for nil:NilClass):
2: <html>
3:   <head>
4:     <meta charset='utf-8' />
5:     <%= wicked_pdf_stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
6:     <%= wicked_pdf_javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7:     <%= javascript_include_tag "http://www.google.com/jsapi"%>
8:     <%= wicked_pdf_javascript_include_tag 'chartkick'%>
 app/views/layouts/pdf.html.erb:5:in `_app_views_layouts_pdf_html_erb___3130978149028204091_70042742447040'
 app/controllers/campaigns_controller.rb:104:in `block (2 levels) in survey_reporting'
 app/controllers/campaigns_controller.rb:101:in `survey_reporting'

【问题讨论】:

  • 你能发布更多的堆栈跟踪吗?
  • 那个错误告诉你你正在调用start_with?在你期望有一个值但实际上等于nil 的东西上,可能是因为它是一个你认为你已经定义但实际上没有定义的实例变量。堆栈跟踪将具体告诉您发生这种情况的位置。查找项目文件夹中的第一行而不是 gem。
  • @HaseebAhmad - 如果您在浏览器中看到此错误,请单击“完整堆栈跟踪”并发布您将获得的内容。
  • @HaseebAhmad - 你没有碰巧覆盖WickedPdfHelper::Assets::ASSET_URL_REGEX 常量,是吗? github.com/mileszs/wicked_pdf/blob/master/lib/wicked_pdf/… 想不出可以返回 nil 的场景。
  • 有一个官方 issue 解决这个问题:github.com/mileszs/wicked_pdf/issues/470

标签: ruby-on-rails wicked-pdf chartkick


【解决方案1】:

我也有同样的问题。我的问题是我的 application.css.scss 包含 lightbox2 npm 包。这个包的问题是它的资产路径似乎被破坏了,导致箭头不显示。我猜 wicked_pdf_stylesheet_link_tag 并没有忽略这样一个事实,即它无法像普通 stylesheet_link_tag 那样找到资产并导致错误。专门为 PDF 创建一个新的 css 文件并删除 lightbox2 引用为我们修复了错误。

【讨论】:

    【解决方案2】:

    为了处理这个问题, 创建文件 app/assets/stylesheet/bootstrap.css 然后从任何 CDN 复制粘贴引导 css。 现在将此文件包含在您正在使用的布局中。 例如:pdf.html.erb

    <!DOCTYPE html>
    <html>
    <head>
      <title>PDF</title>
      <%= stylesheet_link_tag wicked_pdf_asset_base64("bootstrap") %>
    </head>
    <body>
    <div class='container'>
      <%= yield %>
    </div>
    </body>
    </html>
    

    控制器端的脚本是这样的:

      def job_invoice_view
    
        respond_to do |format|
          format.html { render :layout => 'tukaweb' }
          format.pdf do
            render pdf: "Your_filename",
                   template: "users/job_invoice_view.html.erb",
                   layout: 'pdf',
                   viewport_size: '1280x1000'
          end
        end
      end
    

    【讨论】:

      【解决方案3】:

      @import "bootstrap"之前添加@import "bootstrap-sprockets"

      @import "bootstrap-sprockets"
      @import "bootstrap"
      

      检查这个link

      【讨论】:

        【解决方案4】:

        问题已解决!

        替换

        &lt;%= wicked_pdf_stylesheet_link_tag "application" %&gt;

        &lt;%= stylesheet_link_tag wicked_pdf_asset_base64("pdf") %&gt;

        【讨论】:

          【解决方案5】:

          我通过创建一个特定的 pdf.css.scss 文件并导入了我的自定义样式 (estilo.css) 和 font-awesome style 解决了这个问题。

          /*# pdf.css.scss 
          
          @import "font-awesome";
          @import "estilo";
          

          我无法在那里导入bootstrap.css 文件,因为glyphicon 的src-url 方法。它坏了wicked_pdf

          作为一种解决方法,我只是将所有bootstrap.css 文件复制到我的pdf.css.scss 文件中并删除了所有关于glyphicon 的内容,因为我在生成的PDF 中根本没有使用它。



          更新

          不要在pdf.css.scss 文件中复制和粘贴所有bootstrap.css 源,而是这样做:

          1. 按照这些步骤here;

          2. config/application.rb 中为您添加一行bootstrap.css 文件位置。它应该是这样的:

            /*# config/application.rb
            
            config.assets.paths << "#{Rails.root}/app/assets/stylesheets/font-awesome-4.2.0/css/" 
            config.assets.paths << "#{Rails.root}/app/assets/stylesheets/bootstrap/" 
            config.assets.paths << "#{Rails.root}/vendor/assets/fonts"
            
          3. 最后在您的pdf.css.scss 文件中添加引导程序的导入。它应该是这样的:

            /*# pdf.css.scss
            
            @import "bootstrap";
            @import "font-awesome";
            @import "estilo";
            

          通过所有这些,wicked_pdf 读取 src-urls 方法将起作用!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-31
            相关资源
            最近更新 更多