Рекомендации по использованию 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

** Вопросы **

Ответы