Asset Pipeline — это мощный фреймворк для обработки статических файлов (CSS, JavaScript, изображений) в Rails-приложениях. Рассмотрим его архитектуру и работу подробно.
Основные директории:
app/assets/ # Специфичные для приложения ассеты
lib/assets/ # Ассеты из библиотек
vendor/assets/ # Ассеты сторонних вендоров
Для подключения ассетов используются манифесты:
JavaScript (application.js):
//= require jquery
//= require rails-ujs
//= require_tree .
CSS (application.css):
/*
*= require_self
*= require_tree .
*/
Ассеты обрабатываются по запросу:
При деплое выполняется:
rails assets:precompile
Что происходит:
Ядро Asset Pipeline, отвечает за:
Поддерживаемые форматы:
Конфигурация в config/initializers/assets.rb
:
Rails.application.config.assets.paths << Rails.root.join('lib', 'assets')
Rails.application.config.assets.precompile += %w( admin.js admin.css )
Rails.application.config.assets.digest = true
Современный подход (Rails 7+):
Import Maps (по умолчанию)
// config/importmap.rb
pin "application", preload: true
pin "@hotwired/turbo-rails", to: "turbo.min.js"
Esbuild/Webpack (для сложных случаев)
./bin/rails javascript:install:esbuild
Современные варианты:
Tailwind CSS
./bin/rails css:install:tailwind
Sass
// application.scss
@import "variables";
@import "components/*";
CDN для ассетов:
config.action_controller.asset_host = 'https://cdn.example.com'
GZIP-сжатие:
config.assets.compress = true
Кэширование:
config.static_cache_control = "public, max-age=31536000"
Просмотр списка ассетов:
rails assets:precompile --trace
Проверка путей:
Rails.application.config.assets.paths
В development-режиме:
Резюмируем: Asset Pipeline — это комплексная система управления статическими ресурсами в Rails, обеспечивающая конкатенацию, минификацию, препроцессинг и эффективное кэширование. В современных версиях Rails он эволюционировал в сторону использования более современных инструментов, таких как Import Maps и Esbuild, сохраняя при этом свою ключевую функциональность.