Cайт веб-разработчика, программиста Ruby on Rails ESV Corp. Екатеринбург, Москва, Санкт-Петербург, Новосибирск, Первоуральск

gem dartsass-sprockets вызывает исключение "expected selector." при обработке стилей

Ruby 4.0.6
Rails 8.1.3
gem "sprockets-rails" 3.5.2
gem "dartsass-sprockets" 3.2.1

gem dartsass-sprockets при включенной опции config.sass.style = :compressed вызывает исключение "expected selector."

/* this style raise error: */
span.rub {
  content: " \20BD";
}

/* this also raise */
span.rub { content: "рублей"; }
 
/* this code solve problem: */
span.rub {
  --ruble-sign: " \20BD";
  content: var(--ruble-sign);
}

Самое неприятное, что в сообщении об ошибке нет вообще никакой полезной информации о том, где что-то не так — приходится искать методом исключения, и это отнимает время. Надеюсь, кому-то это поможет избежать напрасной траты времени и нервов на поиск причин, почему стили могут приводить к ошибке в обработке.

Похоже, что проблема заключается ещё и в двойном проходе, в попытке двойной компрессии таблиц стилей. В документации https://github.com/tablecheck/dartsass-sprockets сказано:

CSS Minification (Production)

This gem uses a Railtie to automatically set the following configuration in all environments except Development:

# set automatically by this gem
config.assets.css_compressor = :sass

This causes Sprockets to minify all CSS assets (both Sass and plain CSS) using Dart Sass. This minification is done as a second-pass after compiling the Sass to CSS, and is done irrespective of whether the config.sass.style option is set to :compressed. To disable this behavior, set config.assets.css_compressor = false.

Для того, чтобы предотвратить повторную обработку (сжатие), необходимо установить следующие значения конфигурации (config/environments/production.rb):

config.assets.css_compressor = false
config.sass.style = :compressed

С данными настройками всё работает без всяких трюков с использованием var в стилях. Остаётся открытым вопрос — какой же всё-таки gem неправильно обрабатывает строку в кодироке кирилицы. Но глубже пока рыть не стал — у меня есть занятия и поинтереснее.