Перекомпиляция Sass активов в производство - PullRequest
2 голосов
/ 16 марта 2012

Я работаю над приложением rails, где мы хотим, чтобы пользователь мог использовать инструмент администратора для создания новых тем. Инструмент администратора является отдельным приложением и связывается с нашим основным приложением через базу данных. Моя проблема в том, что я написал собственные расширения Sass для загрузки наших данных в таблицы стилей, но как только это будет сделано, я не смогу перекомпилировать ресурсы в нашей производственной среде.

Пока я видел две возможности для этого:

1. Улучшить версию config.assets.version. Итак, у меня есть этот код:

MyApp::Application.assets.version = 
       (MyApp::Application.config.assets.version.to_i + .1)

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

2.Создайте компилятор и скажите ему очистить старые ресурсы и перекомпилировать их:

compiler = Compass::Compiler.new(
                    Rails.root.to_s,
                    Compass.configuration.sass_path,
                    Compass.configuration.css_path,
                    {:sass => Compass.sass_engine_options} )
compiler.clean!
compiler.run

Однако, используя этот метод, я столкнулся с проблемой, что Sprockets :: Index.expire_index! метод вызывает ошибку, когда я пытаюсь создать новый компилятор.

Да, я понимаю, что могу настроить ресурсы для перекомпиляции при каждом запросе, но снижение производительности - это не то, чего мы хотим. Кроме того, поскольку это тема, данные не должны часто меняться, поэтому нам нужно перекомпилировать только тогда, когда администратор решит сохранить новую тему.

Итак, наконец, мой вопрос: есть ли другие возможные способы сделать то, что я хочу? Или я иду по правильному пути, и если да, то где я иду не так?

EDIT: Я забыл упомянуть, что, поскольку мы используем функции Sass для изменения значений таблиц стилей, даже если я включу опцию для компиляции в производстве, это не сработает. Поскольку настоящие таблицы стилей никогда не изменятся.

1 Ответ

4 голосов
/ 17 октября 2012

Rails имеет задачу Rake, которая выполняет компиляцию ресурсов для вас.Вы должны запускать его один раз при каждом развертывании приложения в производственной среде.

rake assets:precompile

Скомпилированные ресурсы выводятся в public/assets.Для получения более подробной информации, ознакомьтесь с Руководством по конвейерным активам Rails .

...