Неопределенный метод has?для Sass :: Util: Module (NoMethodError) - Ошибка в Debian с Ruby, Sass, Compass - PullRequest
0 голосов
/ 08 февраля 2019

Я искал решение следующей проблемы, но не смог ничего найти.Поэтому я надеялся, что вы сможете мне помочь.Спасибо.

У меня есть:

  • Debian Stretch (дистрибутив: Debian GNU/Linux 9.7, ядро: Linux 4.9.0-8-amd64 (x86_64));
  • Apache NetBeans 10 (инкубационный) - оснастка установлена ​​из https://snapcraft.io/netbeans;
  • PHP 7.1 .

Я установил (вдохновляя себя от этой страницы:

  • Рубин (с: sudo apt install ruby-full);
  • Sasssudo gem install sass);
  • Компас sudo gem install compass);

и проверены их версии:

# ruby --version
ruby 2.3.3p222 (2016-11-21) [x86_64-linux-gnu]

# sass --version
Ruby Sass 3.7.3

# compass --version
Compass 1.0.3 (Polaris)
Copyright (c) 2008-2019 Chris Eppstein

Обратите внимание, что у меня нет опыта работы с Ruby.

У меня есть следующие настройки NetBeans :

*) Во вкладке «Инструменты> Параметры> HTML / JS> CSS Preprocessors» :

Sass Path: /usr/local/bin/sass

Я также пробовал:

Sass Path: /usr/local/bin/scss

*) На вкладке "Файл> Свойства проекта> CSS-препроцессоры> Sass" :

Input: /web/src/Application/assets/scss
Output: /web/public/assets/css
Compiler Options: --compass -E "UTF-8" --trace --no-cache

Backtrace:

Когда я пытался скомпилировать файлы .scss (чтобы создать соответствующие файлы .css ), я получил ошибкудля каждого из них.Это обратная трассировка для первого .scss файла:

"/usr/local/bin/sass" "--cache-location" "/home/<my-username>/snap/netbeans/common/cache/10.0/sass-compiler" "--sourcemap=none" "--compass" "-E" "UTF-8" "--trace" "--no-cache" "<my-path-to-project-root>/web/src/Application/assets/scss/fonts.scss" "<my-path-to-project-root>/web/public/assets/css/fonts.css"
/var/lib/gems/2.3.0/gems/compass-core-1.0.3/lib/compass/core/sass_extensions/functions/urls.rb:5:in `has?': undefined method `has?' for Sass::Util:Module (NoMethodError)
Did you mean?  hash
               Hash
    from /var/lib/gems/2.3.0/gems/compass-core-1.0.3/lib/compass/core/sass_extensions/functions/urls.rb:9:in `included'
    from /var/lib/gems/2.3.0/gems/sass-3.7.3/lib/sass/script/functions.rb:627:in `include'
    from /var/lib/gems/2.3.0/gems/sass-3.7.3/lib/sass/script/functions.rb:627:in `include'
    from /var/lib/gems/2.3.0/gems/compass-core-1.0.3/lib/compass/core/sass_extensions/functions.rb:23:in `<module:Functions>'
    from /var/lib/gems/2.3.0/gems/compass-core-1.0.3/lib/compass/core/sass_extensions/functions.rb:19:in `<top (required)>'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /var/lib/gems/2.3.0/gems/compass-core-1.0.3/lib/compass/core/sass_extensions.rb:9:in `<top (required)>'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /var/lib/gems/2.3.0/gems/compass-core-1.0.3/lib/compass/core.rb:68:in `<top (required)>'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass.rb:14:in `block in <top (required)>'
    from /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass.rb:13:in `each'
    from /var/lib/gems/2.3.0/gems/compass-1.0.3/lib/compass.rb:13:in `<top (required)>'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `require'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:127:in `rescue in require'
    from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:40:in `require'
    from /var/lib/gems/2.3.0/gems/sass-3.7.3/lib/sass/exec/sass_scss.rb:238:in `load_compass'
    from /var/lib/gems/2.3.0/gems/sass-3.7.3/lib/sass/exec/sass_scss.rb:49:in `process_result'
    from /var/lib/gems/2.3.0/gems/sass-3.7.3/lib/sass/exec/base.rb:50:in `parse'
    from /var/lib/gems/2.3.0/gems/sass-3.7.3/lib/sass/exec/base.rb:18:in `parse!'
    from /var/lib/gems/2.3.0/gems/sass-3.7.3/bin/sass:13:in `<top (required)>'
    from /usr/local/bin/sass:22:in `load'
    from /usr/local/bin/sass:22:in `<main>'
Done.

urls.rb file :

Это начальное содержимое файла, указанного в backtrace ( / var / lib / gems / 2.3.0 /gems / compass-core-1.0.3 / lib / compass / core / sass_extensions / functions / urls.rb ):

module Compass::Core::SassExtensions::Functions::Urls


  def self.has?(base, instance_method)
    Sass::Util.has?(:instance_method, base, instance_method)
  end

  def self.included(base)
    base.send(:include, StylesheetUrl) unless has?(base, :stylesheet_url)
    base.send(:include, FontUrl) unless has?(base, :font_url)
    base.send(:include, ImageUrl) unless has?(base, :image_url)
    base.send(:include, GeneratedImageUrl) unless has?(base, :generated_image_url)
  end

1 Ответ

0 голосов
/ 19 февраля 2019

Проблема:

Проблема заключалась в том, что я установил пакет Debian ruby-full вместе с Sass и Compass в качестве ruby ​​gems, например, используя команду gem line tool.

Решение:

По умолчанию в Debian 9.7 ( Stretch ) установлен интерпретатор Ruby (версия 2.3).Имя пакета ruby2.3.Чтобы иметь возможность правильно компилировать файлы .scss и использовать функции, предоставляемые Compass, дополнительно должны быть установлены только пакеты ruby-sass и ruby-compass.

Выполнены следующие шаги:

I) Сначала, используя Terminal, я продолжил удаление ранее неправильно установленных библиотек:

Я удалил пакет ruby-full:

$ sudo apt purge ruby-full
$ sudo apt autoremove

Я удалил гемы Sass и Compass:

$ sudo gem uninstall compass
$ sudo apt autoremove

$ sudo gem uninstall sass
$ sudo apt autoremove

II) Затем я приступил к установке новых пакетов:

Я проверил состояние версии Ruby по умолчанию для Debian:

$ apt list ruby2.3*
ruby2.3/stable,now 2.3.3-1+deb9u4 amd64 [installed]
ruby2.3-dev/stable,now 2.3.3-1+deb9u4 amd64 [installed,automatic]
ruby2.3-doc/stable,now 2.3.3-1+deb9u4 all [installed,automatic]

Я установил новые пакеты:

$ apt update
$ apt install ruby-sass
$ apt install ruby-compass

Я проверил версии обоих установленных пакетов:

$ sass --version
Sass 3.4.23 (Selective Steve)

$ compass --version
Compass 1.0.3 (Polaris)
Copyright (c) 2008-2019 Chris Eppstein

Я проверил расположение установленных исполняемых файлов:

$ which sass
/usr/bin/sass

$ which compass
/usr/bin/compass

III) В конце в Netbeans на вкладке Tools > Options > HTML/JS > CSS Preprocessors я установил Sass Path до /usr/bin/sass.

Вот и все.Файлы Sass правильно скомпилированы, а функции компаса правильно распознаны и вызваны.

...