Фишки Rails. Asset Pipeline

В посте речь пойдёт о работе с ресурсными файлами в Rails.

В Rails все ресурсные файлы раскиданы по следующим папкам:

Midispot
├-app # Код, специфичный для приложения
| └-assets
|   ├-stylesheets
|   ├-javascript
|   └-images
├-lib # Свой код, подключаемый в разные приложения
| └-assets
|   ├-stylesheets
|   ├-javascript
|   └-images
└-vendor # Сторонний код (календарь, слайдшоу, типа того)
  └-assets
    ├-stylesheets
    ├-javascript
    └-images

При том, что файлы лежат по разным папкам, путь к ним всегда однотипный: /assets/custom.js, /assets/rails.png

Хэлперы ресурсных тэгов

<%= javascript_include_tag 'custom' %> # => <script src='/assets/custom.js' />
<%= stylesheet_link_tag 'style' %> # => <link href='/assets/style.css' media='screen' ... />
<%= image_tag 'rails.png' %> # => <img alt='Rails' src='/assets/rails.png' />

В продакшене к имени ресурсного файла будет добавлен его хэш (/assets/rails-9af4d124c65baf000032154.png). Это сделано для того, чтобы браузер мог легко определить, что файл изменился (изменение файла вызовет изменение хэша, а значит и названия), и перекачать его вместо использования закэшированной версии.

# app/assets/stylesheets/posts.css.erb
form.new_post input.submit {
    background-image: url(<%= asset_path('button.png') %>)
}