Skip to content

Sass::SyntaxError when running assets:precompile with config.css_compressor = :sass #368

@fernandomm

Description

@fernandomm

If you have the following invalid CSS in one of your css files:

.example {
//width: 100% !important;}

You will get a Sass::SyntaxError when config.css_compressor is set to sass ( the default option for test and production env in Rails ).

In development env this won't cause any issues since the css_compressor isn't enabled. Also, it looks like sass-rails doesn't provide a viable way to determine which file is causing the error.

Here is a sample application to reproduce the issue ( the README contains more information ): https://github.com/fernandomm/scss-comments-failure

Here is the full exception:

rake aborted!
Sass::SyntaxError: Invalid CSS after " */": expected "}", was ""
(sass):19
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:1189:in `expected'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:1125:in `expected'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:1120:in `tok!'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:658:in `block'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:649:in `ruleset'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:675:in `block_child'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:665:in `block_contents'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:125:in `stylesheet'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/scss/parser.rb:41:in `parse'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/engine.rb:406:in `_to_tree'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sass-3.4.22/lib/sass/engine.rb:281:in `render'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/sass_compressor.rb:48:in `call'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/sass_compressor.rb:28:in `call'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/processor_utils.rb:75:in `call_processor'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/processor_utils.rb:57:in `block in call_processors'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/processor_utils.rb:56:in `reverse_each'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/processor_utils.rb:56:in `call_processors'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/loader.rb:134:in `load_from_unloaded'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/loader.rb:60:in `block in load'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/loader.rb:317:in `fetch_asset_from_dependency_cache'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/loader.rb:44:in `load'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/cached_environment.rb:20:in `block in initialize'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/cached_environment.rb:47:in `load'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/base.rb:66:in `find_asset'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/base.rb:73:in `find_all_linked_assets'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/manifest.rb:142:in `block in find'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/legacy.rb:114:in `block (2 levels) in logical_paths'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/path_utils.rb:223:in `block in stat_tree'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/path_utils.rb:207:in `block in stat_directory'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/path_utils.rb:204:in `each'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/path_utils.rb:204:in `stat_directory'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/path_utils.rb:222:in `stat_tree'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/legacy.rb:105:in `each'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/legacy.rb:105:in `block in logical_paths'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/legacy.rb:104:in `each'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/legacy.rb:104:in `logical_paths'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/manifest.rb:140:in `find'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/sprockets/manifest.rb:185:in `compile'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-rails-3.0.4/lib/sprockets/rails/task.rb:68:in `block (3 levels) in define'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-3.6.0/lib/rake/sprocketstask.rb:147:in `with_logger'
/Users/fernando/.rvm/gems/ruby-2.3.0/gems/sprockets-rails-3.0.4/lib/sprockets/rails/task.rb:67:in `block (2 levels) in define'
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

Maybe the css_processor shouldn't fail in this case, or at least it should indicate the exact file that is causing this problem? If you have a big or multiple CSS files it's hard to find the error.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions