Проблемы с прекомпиляцией ресурсов при использовании подстановочных знаков в config.assets.precompile - PullRequest
3 голосов
/ 17 января 2012

У меня есть несколько ресурсов в приложении Rails 3.2rc1, вот некоторые из них:

app/
  assets/
    stylesheets/
      application.css.scss
      users.css.scss
      projects.css.scss
      (...)
      parts/
        fonts.scss
        (...)

application.css.scss - это простой манифест с такими строками, как:

@import 'parts/fonts';

И views/layouts/application.html.slim загружает предварительно скомпилированные таблицы стилей:

= stylesheet_link_tag "application", media: "all"
= stylesheet_link_tag params[:controller], media: "all"

Пока все хорошо, отлично работает для разработки. Во время развертывания в рабочей среде вызывается rake assets:precompile, и он отлично работает для таблицы стилей приложения. Но таблицы стилей для каждого контроллера были пропущены и, следовательно, бомбы приложения.

Чтобы исправить это, я добавил это к config/environments/production.yml:

config.assets.precompile += %w(*.css *.js)

Таблицы стилей для каждого контроллера теперь скомпилированы, но приложение все еще содержит:

ActionView::Template::Error (application.css isn't precompiled):
    5:     = stylesheet_link_tag "application", media: "all"
  app/views/layouts/application.html.slim:5:in `_app_views_layouts_application_html_slim__4032169744877009540_23192340'

Но когда я смотрю в public/assets/, прекомпилированный application-3218a93530ecb65582d5b345133dab49.css и его сжатый близнец есть.

И если я заменю подстановочные знаки в config/environments/production.yml списком всех таблиц стилей для каждого контроллера (другими словами: все, кроме application.css), все будет работать как шарм:

config.assets.precompile += %w(users.css projects.css)

Является ли таблица стилей приложения несколько обработанной дважды, и поэтому прекомпиляция не работает так, как объявлено?

1 Ответ

4 голосов
/ 23 января 2012

Вот как мне обойти это сейчас:

files = Dir[Rails.root.join('app', 'assets', '{javascripts,stylesheets}', '**', '[^_]*.{js,css}*')]
files.map! {|file| file.sub(%r(#{Rails.root}/app/assets/(javascripts|stylesheets)/), '') }
files.map! {|file| file.sub(%r(\.(coffee|scss)), '') }
config.assets.precompile += files

Возможно, в какой-то момент может быть лучшее решение: https://github.com/rails/rails/issues/3094

...