Управление ассетами в приложении на Ruby on Rails с помощью Bower

Александр Борисов, 14 августа 2014

Никакое управление ассетами в приложении на Ruby on Rails

По мере разработки в приложение на Ruby on Rails подключается всё больше клиентских библиотек: Angular, Bootstrap, плагины для jQuery. При этом, по умолчанию фреймворк предлагает управлять зависимостями между этими библиотеками примерно никак. Вы или добавляете гемы в гемфайл, которые состоят исключительно из ассетов, или кладёте файлы в vendor/assets. В первом случае бывает, что гем обновляется редко, а приложение запускается медленнее из-за большого количества гемов. Во втором случае обновить версию какого либо ассета очень сложно – приходится вручную разбираться с зависимостями.

Использование Bower для управления ассетами

Bower – это инструмент управления ассетами, созданный командой Твиттера. Он работает аналогично RubyGems и bundler: вы описываете перечень ассетов, которые вам нужны, и с помощью одной команды устанавливаете их все. При этом, у вас есть возможность указать конкретную версию каждого ассета, коммит, ветку и адрес гит-репозитория. Bower сам отслеживает зависимости между ассетами, и выводит ошибки установки.

Установка Bower в RoR-приложение

Добавьте в Gemfile:

gem 'bower-rails'

И выполните bundle install. После этого установите Bower: sudo npm install bower -g (для установки понадобится предварительно установить NodeJS и npm).

В корневом каталоге приложения создайте Bowerfile:

asset 'jquery', '1.11.1'
asset 'jquery-ujs'
asset 'jquery-ui'
asset 'evil-blocks'

По-умолчанию Bower установит ассеты в каталог vendor/assets/bower_components, поэтому в config/application.rb добавьте config.assets.paths << Rails.root.join('vendor', 'assets', 'bower_components').

Подключите ассеты в файле app/assets/javascripts/application.js.coffee:

#= require jquery
#= require jquery-ujs
#= require jquery-ui
#= require evil-blocks

Чтобы установить перечисленные в Bowerfile ассеты выполните:

rake bower:install

Bower и выкладка с помощью Capistrano

Для Capistrano 2 добавьте в deploy.rb:

namespace :deploy do
  namespace :bower do
    task :install, :roles => :web, :except => { :no_release => true } do
      run "cd #{release_path} && bundle exec rake bower:install:deployment RAILS_ENV=#{rails_env}"
    end
  end
end

after 'deploy:finalize_update', 'deploy:bower:install'

Убедитесь, что на сервере установлен Bower.

Используйте Bower для управления ассетами

Несмотря на то, что использование Bower тянет за собой необходимость установки NodeJS, использование этого инструмента позволяет управлять зависимостями между ассетами в вашем приложении автоматически и разрабатывать фронтенд-компоненты в отдельных git-репозиториях например.

Смотрите также


comments powered by Disqus
Блог Цифрономики

Мысли о веб-разработке на Ruby on Rails: работа с кодом, приёмы, инструменты, организация процесса разработки.

@cifronomika
RSS


Веб-разработка на Ruby on Rails, реализация сложных проектов
mailbox@cifronomika.ru
+7 (910) 535-99-11