Как подружить compass и assets precompile?

Я окончательно запутался. Пытаюсь выложить проект в продакшен, но он упирается. Было решено компилировать ассеты на локальном компьютере, потом заливать на сервер.
В проекте участвует compass и спрайты. Иконки для спрайтов лежат в папке app/assets/images/theme-name/icons. При запуске девелопмент сервера, картинки собираются в спрайт и ложатся в файл app/assets/images/theme-name/icons-xxxxxxxxxxxxxxxxxx.png. И все прекрасно работает.
Запускаю rake assets:precompile в папку /public/dev-assets/theme/name/icons попадают отдельные картинки, а нужно, чтобы собралось грубо говоря 4 спрайта (у меня 4 темы) по одному в каждой папке /public/dev-assets/theme-name/icons-xxxxx.png.
Я так понял sprockets штудирует app/assets/images и все картинки без разбора сует в /public/dev-assets. Я убрал иконки из /app/assets/images в /icons, перенеся всю структуру папок. Т.е. сейчас в папке проекта /icons/theme-name/icons

environments/development.rb

config.compass.project_type = :rails
	config.compass.environment = :development
	config.compass.images_dir = 'icons'
	config.compass.generated_images_dir = 'public/dev-assets/icons'
	config.compass.output_style = 'expanded'
	config.compass.relative_assets = true
	config.compass.line_comments = true


sass стили:
@import 'compass'
@import "compass/utilities/sprites"

$icons-layout:smart
@import "grey/icons/*.png"
@include all-icons-sprites


Запускаю rails s в девелопменте, получаю ошибку:
No files were found in the load path matching "grey/icons/*.png". Your current load paths are: F:/myapp/app/assets/images, F:/myapp/app/assets/javascripts, F:/myapp/app/assets/stylesheets
(in F:/myapp/app/assets/stylesheets/styles_grey_theme.sass:5

Может я вообще не верно представляю как делаются подобные вещи. Как это работает у вас?
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
codingal
@codingal
Front end и не только
Проблема в путях
In the simplest case, a Sprockets environment's load path will consist of a single directory

т.е. рассчитывает на одну папку


To add a directory to your environment's load path, use the append_path and prepend_path methods. Directories at the beginning of the load path have precedence over subsequent directories.

environment = Sprockets::Environment.new
environment.append_path 'app/assets/javascripts'
environment.append_path 'lib/assets/javascripts'
environment.append_path 'vendor/assets/jquery'


т.е. в его класс нужно практически захардкодить все директории с темами
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы