2012-03-16 4 views
2

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

До сих пор я видел две возможности для этого:

1.Increment версии config.assets.version. Поэтому у меня есть этот код:

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

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

2.Create компилятор и сказать ему, чтобы очистить старые активы и перекомпилировать их:

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 

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

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

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

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

ответ

4

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

rake assets:precompile

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

Смежные вопросы