Рекомендации по использованию Rails
Я новичок в Rails и не знаю, как лучше всего организовать свои активы. Цель этого вопроса - собрать мои мысли, запросить ввод и развить документ с течением времени - возможно, это может быть Rails Guide когда-нибудь. (The Rails Wiki, похоже, мертв.) Это будет означать помощь концептуализации новичков, а не ссылку, поэтому она будет ограничена наиболее распространенными сценариями.
Консоли проекта - обзор
Подробнее о цели, преимуществах и внутренней работе трубопровода, начните с этого руководства: http://guides.rubyonrails.org/asset_pipeline.html Я только подытожу бит, относящийся к моим целям здесь.
Причины, по которым нужен конвейер, следующие:
- Компиляция: Чтобы скомпилировать языки высокого уровня (ERb, Haml, Sass, LESS, CoffeeScript...) в простой CSS/JS.
Дополнительные преимущества трубопровода:
- Конкатенация. Объединение нескольких файлов в один для повышения производительности клиента.
- Minification: Удаление пробелов и других умных оптимизаций для уменьшения размера файла.
- Фингерпринт: Добавлен хеш MD5 содержимого файла в имя файла, чтобы заставить кеши ** извлекать файл снова, когда он изменяется.
Asset Pipeline - компоновка файловой системы по умолчанию
-
app|lib|vender/assets/
- предназначен для файлов, которые будут обрабатываться конвейером. -
app/assets/
- предназначен специально для файлов, созданных для вашего приложения. -
lib/assets/
- предназначен специально для файлов, созданных для совместного использования несколькими приложениями. -
vendor/assets/
- Предназначен специально для файлов, созданных другими, таких как jQuery и Twitter Bootstrap (хотя они часто предоставляются драгоценными камнями вместо импорта непосредственно в /vender ). -
public/
- Файлы здесь оставлены как есть и извлекаются непосредственно из корневого пути ('/') вашего веб-приложения.
Asset Pipeline - файлы и поведение по умолчанию
Приложение/активы/JavaScripts/application.js
//= require jquery
//= require jquery_ujs
//= require_tree .
Приложение/активы/таблицы стилей /application.css
/*
*= require_self
*= require_tree .
*/
открытый/404.html
общественности /robots.txt
...
Gemfile
...
gem 'jquery-rails'
...
Вот что делает компилятор конвейера ресурсов, используя стандартную настройку нового приложения Rails:
- Компилятор по умолчанию обрабатывает
application.js
,application.css
и все файлы, отличные от JS/CSS (изображения, в основном). - Два файла приложения содержат директивы sprockets (строки комментариев, начинающиеся с =). Sprockets - это библиотека, которая управляет компиляцией конвейера ресурсов Rails. Эти директивы также называются манифестами, поскольку они перечисляют файлы для включения.
-
application.js
содержит манифест, который извлекает два файла jquery (которые существуют в jquery-rails gem, а не в вашем приложении), затем извлекает все файлы в деревеapp/assets/javascripts/
черезrequire_tree .
. Все файлы, включенные через этот манифест, будут скомпилированы в один файл с именемapplication-[the MD5 hash].js
и помещены вpublic/assets/
. -
application.css
содержит манифест, который извлекает все файлы в деревеapp/assets/stylesheets/
черезrequire_tree .
. Директиваrequired_self
сообщает компилятору о включении любого содержимого CSS в файлapplication.css
и в порядке директив. Итак, в этом случае CSS вapplication.css
будет отображаться над остальными. Все файлы, включенные через этот манифест, будут скомпилированы в один файл с именемapplication-[the MD5 hash].css
и помещены вpublic/assets/
. - Все файлы, отличные от JS/CSS (изображения, в основном) в дереве приложений/активов, также будут отпечатаны и помещены в
public/assets/
, при этом структура каталогов будет неповрежденной. Например,app/assets/images/categories/computers.png
закончится какpublic/assets/categories/computers-[the MD5 hash].png
.
Концептуализация сценариев зависимостей внутри компании
Изображения
Изображения не имеют зависимости между ними, они всегда остаются в одиночестве.
Таблицы стилей
- CSS: Файлы CSS могут импортировать друг друга, что будет работать до тех пор, пока пути верны, хотя это, вероятно, не лучший метод.
- Sass: Файлы Sass могут импортировать друг друга, а также обмениваться переменными и микшинами, но только тогда, когда они все еще остаются Sass (не после компиляции в CSS) и только через импорт Sass. Если у вас есть директивы sprockets в
application.css.scss
, которые требуют "a" и "b", они будут скомпилированы в отдельных контекстах перед слиянием. Чтобы совместно использовать переменные и mixins, вы должны импортировать "a" из "b" или наоборот с помощью директив Sass import. (См. Основные понятия 1 ниже.) - МЕНЬШЕ: [Не знаю об этом достаточно.]
JavaScript
- JS:Компоненты JavaScript имеют взаимозависимости (пример: Twitter Bootstrap использует jQuery). Тем не менее, все они получают разрешение во время выполнения в браузере, поэтому не имеет значения, как вы организуете/объединяете файлы в своем проекте, если все содержимое в конечном итоге загружается браузером.
- CoffeeScript: [Не знаю об этом достаточно.]
Поведение помощника - представления Rails
TODO
Поведение помощника - Sass
TODO
Лучшие практики - Основные понятия
- Трубопровод предназначен для подготовки активов к производству. Подумайте об этом как о части системы развертывания, а не о самом приложении. Создайте логическую структуру своего приложения самостоятельно, затем настройте звездочки для правильной работы в этой структуре.
Рекомендации - Общие сценарии активов
TODO
Лучшие практики - сводка общедоступных значений по умолчанию
TODO
** Вопросы **