0

Я пытаюсь пошевелить проект по производству,
пытаетсяошибка прекомпиляции активов при переходе к производству

RAILS_ENV=production bundle exec rake assets:precompile 

дает мне ошибку, не указав, в каком файле она.

rake aborted! 
Sass::SyntaxError: Invalid CSS after "}": expected selector or at-rule, was "}" 
(sass):89 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sass-3.4.23/lib/sass/scss/parser.rb:1207:in `expected' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sass-3.4.23/lib/sass/scss/parser.rb:1137:in `expected' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sass-3.4.23/lib/sass/scss/parser.rb:42:in `parse' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sass-3.4.23/lib/sass/engine.rb:406:in `_to_tree' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sass-3.4.23/lib/sass/engine.rb:281:in `render' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sprockets-3.7.1/lib/sprockets/sass_compressor.rb:48:in `call' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sprockets-3.7.1/lib/sprockets/sass_compressor.rb:28:in `call' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sprockets-3.7.1/lib/sprockets/processor_utils.rb:75:in `call_processor' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sprockets-3.7.1/lib/sprockets/processor_utils.rb:57:in `block in call_processors' 
/Users/mac/.rvm/gems/ruby-2.2.3/gems/sprockets-3.7.1/lib/sprockets/processor_utils.rb:56:in `reverse_each' 

Как узнать, в каком файле произошла ошибка? даже с --trace это не говорит мне.

+0

В то время как у меня была такая же проблема с синтаксисом js. Та же проблема в процессе сжатия. Мое решение состояло в том, чтобы создать скрипт для сжатия каждого файла и проверить, какой из них вызывает ошибку. – mrlew

+0

, но говорит, что это недействительный CSS, как его js? –

+0

Я говорил свое дело. Такая же ситуация, но с синтаксической ошибкой файла js. Решение, которое я нашел, состояло в том, чтобы сжать каждый файл отдельно, чтобы узнать, какой из них был недопустимым. – mrlew

ответ

3

Данная проблема возникает при исследовании: https://github.com/rails/sass-rails/issues/368. По-видимому, вам нужно будет проверить каждый файл, чтобы узнать, какой из них не удается скомпилировать.

Но вы можете создать задачу грабли, чтобы помочь с процессом:

Просто добавьте следующий код в lib/tasks/assets.rake файл

namespace :assets do 

    desc "Find Sass::SyntaxError files..." 
    task find_scss_with_error: :environment do 
    files = Dir.glob(Rails.root.join("app", "assets", "stylesheets", "**/*")).grep(/.*\.[css|scss]/) 
    files.each do |file| 
     print "Trying to compile #{file}..." 
     template = File.read(file) 
     sass_engine = Sass::Engine.new(template) 
     begin 
      sass_engine.render 
      print "[OK]" 
     rescue 
      print "[ERROR]" 
     end 
     puts 
    end 
    end 

end 

и запустить

rake assets:find_scss_with_error 

Результаты:

Trying to compile /data/ruby/scss-comments-failure/app/assets/stylesheets/example.css...[ERROR] 
Trying to compile /data/ruby/scss-comments-failure/app/assets/stylesheets/application.css...[OK] 

Некоторые примечания:

  • Он будет проверять наличие *.css и *.scss файлов, включая подкаталоги.
  • Сценарий не выводит сжатие в файл. Это просто тест в памяти.