неопределенный метод `start_with?' для нуля: NilClass

Использование chartkick с wicked-pdf.

приложение/макет/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'

person Haseeb Ahmad    schedule 23.02.2016    source источник
comment
Можете ли вы опубликовать больше трассировки стека.   -  person j-dexx    schedule 23.02.2016
comment
Эта ошибка говорит вам, что вы вызываете start_with? на что-то, что, как вы ожидаете, будет иметь значение, но на самом деле равно nil, возможно, потому, что это переменная экземпляра, которую вы считаете определенной, но на самом деле это не так. Трассировка стека покажет вам, где именно это происходит. Ищите первую строку, которая находится в папке вашего проекта, а не в драгоценном камне.   -  person Max Williams    schedule 23.02.2016
comment
@j-dexx, какой файл тебе нужен?   -  person Haseeb Ahmad    schedule 23.02.2016
comment
Я обновляю свой вопрос с помощью трассировки стека   -  person Haseeb Ahmad    schedule 23.02.2016
comment
@HaseebAhmad Что такое метод survey_reporting в контроллере кампаний?   -  person j-dexx    schedule 23.02.2016
comment
@HaseebAhmad - Если вы видите эту ошибку в своем браузере, щелкните полную трассировку стека и опубликуйте, что вы получите.   -  person BroiSatse    schedule 23.02.2016
comment
@HaseebAhmad - Вы случайно не переопределили константу WickedPdfHelper::Assets::ASSET_URL_REGEX, не так ли? github.com/mileszs/wicked_pdf/blob/ master/lib/wicked_pdf/ Не могу придумать сценарий, который мог бы вернуть ноль.   -  person BroiSatse    schedule 23.02.2016
comment
Для этой проблемы открыта официальная проблема: github.com/mileszs/wicked_pdf/issues/470< /а>   -  person infused    schedule 23.02.2016
comment
@BroiSatse, что означает, что вам не удалось переопределить WickedPdfHelper::Assets::ASSET_URL_REGEX. Я не могу переопределить ничего подобного   -  person Haseeb Ahmad    schedule 24.02.2016
comment
@HaseebAhmad - это рубин, здесь вы можете все переопределить. :) Это было довольно далеко, так что не обращайте на это внимания.   -  person BroiSatse    schedule 24.02.2016


Ответы (5)


Проблема решена!

заменять

<%= wicked_pdf_stylesheet_link_tag "application" %>

с <%= stylesheet_link_tag wicked_pdf_asset_base64("pdf") %>

person prashant nisal    schedule 04.09.2018

Я решил эту проблему, создав специальный файл pdf.css.scss и импортировав свой собственный стиль (estilo.css) и font-awesome style.

/*# pdf.css.scss 

@import "font-awesome";
@import "estilo";

Мне не удалось импортировать туда файл bootstrap.css, потому что метод src-url glyphicon. Он сломался wicked_pdf.

В качестве обходного пути я просто скопировал все файлы bootstrap.css в свой файл pdf.css.scss и стер все файлы glyphicon, так как я вообще не использую их в своем сгенерированном PDF-файле.



Обновлять

Вместо того, чтобы копировать и вставлять весь исходный код bootstrap.css в файл pdf.css.scss, сделайте следующее:

  1. Выполните следующие действия здесь;

  2. Добавьте строку для вашего bootstrap.css местоположения файла в вашем config/application.rb. Это должно выглядеть так:

    /*# 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 будет работать!

person aranhaqg    schedule 15.06.2016

Добавление @import "bootstrap-sprockets" перед @import "bootstrap":

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

проверьте эту ссылку

person elmerfreddy    schedule 29.01.2019

Чтобы решить эту проблему, создайте файл app/assets/stylesheet/bootstrap.css. Затем скопируйте и вставьте загрузочный css из любого CDN. Теперь включите этот файл в макет, который вы используете. пример: 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
person vidur punj    schedule 17.10.2019

У меня была такая же проблема. Моя проблема заключалась в том, что мой application.css.scss включал пакет npm lightbox2. Проблема с этим пакетом заключается в том, что пути ресурсов в нем кажутся сломанными, из-за чего стрелки не отображаются. Я предполагаю, что wicked_pdf_stylesheet_link_tag не игнорирует тот факт, что он не может найти ресурс, как это делает обычный stylesheet_link_tag, и вызывает ошибку. Создание нового файла css специально для PDF и удаление ссылки на лайтбокс2 исправили ошибку.

person Tony Petruzzi    schedule 30.09.2020