Конвейер активов не компилируется

У меня есть приложение с тремя разными темами CSS, и каждая из этих тем имеет около дюжины цветовых схем. В разработке все работает нормально, но конвейер активов вызывает у меня некоторые странные проблемы.

По сути, у меня есть несколько таких файлов

/themes
  /cool-theme
    _theme.scss
    /color-schemes
      red.scss

Идея состоит в том, что я предварительно компилирую все файлы * .scss, кроме частичных файлов (начинающихся с подчеркивания), поскольку они включены в SASS. Итак, я использую этот код:

stylesheets_directory = "#{Rails.root}/app/assets/stylesheets"
config.assets.precompile += Dir.glob("#{stylesheets_directory}/**/*.scss").
                            map{|f| f[stylesheets_directory.size+1..-1]}.
                            select do |file|
                            if config.assets.precompile.include?(file)
                              puts "Already have #{file}"
                              false
                            elsif File.basename(file)[0...1] == "_"
                              puts "Partial detected #{file}"
                              false
                            else
                              puts "Including #{file}"
                              true
                            end
                          end

Код работает нормально и показывает результат, который я ожидаю во время прекомпиляции assets:. Исключает все, что должно, и включает все, что должно.

Проблема в том, что каталог / public / assets никогда не содержит файлов css для чего-либо, кроме application.css. Отсутствуют red.css, blue.css и т. Д.

Что я упускаю из виду?


person Kansha    schedule 31.01.2013    source источник


Ответы (1)


Конвейер работает с файлами и таблицами стилей Javascript по умолчанию только для предварительной компиляции файлов application.js и application.css. Вот почему вы попытались добавить больше ресурсов в массив config.assets.precompile. Вы на правильном пути, но сделали несколько ошибок.

Расширение файла

Вам нужно переименовать

app/assets/stylesheets/themes/cool-theme/color-schemes/red.scss

to

app/assets/stylesheets/themes/cool-theme/color-schemes/red.css.scss

Это сообщает конвейеру, что вы хотите, чтобы это был .css файл, когда он завершит компиляцию.

Путь к активу

В настоящее время вы добавляете путь вроде

/Path/To/Your/app/assets/stylesheets/themes/cool-theme/color-schemes/red.scss

в массив config.assets.precompile. Вместо этого вам нужно передать путь в этом формате

themes/cool-theme/color-schemes/red.css

При предварительной компиляции ресурсов вы увидите новую themes папку, созданную внутри public/assets/, содержащую остальную часть вашего дерева каталогов, вместе с скомпилированным red.css файлом.


Я оставлю исправление вашего кода для добавления путей к config.assets.precompile на ваше усмотрение, поскольку вы, кажется, более чем способны внести необходимые изменения, описанные выше.

person deefour    schedule 31.01.2013