Активы трубопровода рельсов 3 структуры - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть следующая структура в папке с активами приложения:

- app
  - assets
    - application.scss
    - themes
      - mytheme
        - default.scss

И в моем application.haml.html я делаю:

= stylesheet_link_tag 'application'
= stylesheet_link_tag "themes/mytheme/default"

Теперь, когда я прекомпилирую мои ресурсы, application.css находится в моей папке public / assets, но default.css моей темы там нет. Это всегда дает мне ошибку в промежуточной среде:

ActionView :: Template :: Error (themes / mytheme / default.css не предкомпилированный)

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

Ответы [ 3 ]

1 голос
/ 23 ноября 2011

Попробуйте изменить файл конфигурации следующим образом:

config.assets.precompile + = ['default.css']

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

1 голос
/ 14 февраля 2013

Вы также можете иметь разные макеты для каждой темы.Хотя это не очень СУХО, иногда полезно продублировать некоторый код, чтобы отделить модули приложения, уменьшая влияние негативных изменений.Нечто аналогичное проблеме Хрупкий базовый класс .

Я бы воспользовался манифестом index и организовал бы ваш app/assets в развязанные модули.Следующая структура принадлежит проекту, над которым я сейчас работаю.Допустим, ваше приложение состоит из трех модулей: общедоступной части, пользовательского интерфейса администратора и, например, CRM, чтобы ваши агенты могли отслеживать процесс продаж в вашей компании:

app/assets/
├── coffeescripts
│   ├── admin
│   │   ├── components
│   │   ├── index.coffee
│   │   └── initializers
│   ├── application
│   │   ├── components
│   │   ├── index.sass
│   │   └── initializers
│   └── crm
│       ├── components
│       ├── index.sass
│       └── initializers
├── images
│   ├── admin
│   ├── application
│   └── crm
└── stylesheets
    ├── admin
    │   ├── components
    │   └── index.sass
    ├── application
    │   ├── components
    │   └── index.sass
    └── crm
        ├── components
        └── index.sass

21 directories, 6 files

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

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

= stylesheet_link_tag 'theme_a'
= javascript_include_tag 'theme_a'

Не забудьте обновить application.rb, чтобы они были правильно скомпилированы:

  config.assets.precompile = %w(admin.js application.js crm.js 
                                admin.css application.css crm.css)
0 голосов
/ 23 ноября 2011

Есть несколько способов избежать исключения:Во-первых, это:Не используйте = stylesheet_link_tag "themes/mytheme/default" в макете или видах.Просто добавьте правильные инструкции в файл application.css (я имею в виду require операторы).Во-вторых:Вы можете включить «сборку реальных активов» в application.rb файле.Вы можете добавить «themes / mytheme / default», чтобы скомпилировать путь для звездочек.Вот дополнительные ресурсы для чтения: конвейер активов

...