Александр Борисов, 14 августа 2014
По мере разработки в приложение на Ruby on Rails подключается всё больше клиентских библиотек: Angular, Bootstrap, плагины для jQuery. При этом, по умолчанию фреймворк предлагает управлять зависимостями между этими библиотеками примерно никак. Вы или добавляете гемы в гемфайл, которые состоят исключительно из ассетов, или кладёте файлы в vendor/assets
. В первом случае бывает, что гем обновляется редко, а приложение запускается медленнее из-за большого количества гемов. Во втором случае обновить версию какого либо ассета очень сложно – приходится вручную разбираться с зависимостями.
Bower – это инструмент управления ассетами, созданный командой Твиттера. Он работает аналогично RubyGems и bundler: вы описываете перечень ассетов, которые вам нужны, и с помощью одной команды устанавливаете их все. При этом, у вас есть возможность указать конкретную версию каждого ассета, коммит, ветку и адрес гит-репозитория. Bower сам отслеживает зависимости между ассетами, и выводит ошибки установки.
Добавьте в 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
Для 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 тянет за собой необходимость установки NodeJS, использование этого инструмента позволяет управлять зависимостями между ассетами в вашем приложении автоматически и разрабатывать фронтенд-компоненты в отдельных git-репозиториях например.
Мысли о веб-разработке на Ruby on Rails: работа с кодом, приёмы, инструменты, организация процесса разработки.
Веб-разработка на Ruby on Rails, реализация сложных проектов
mailbox@cifronomika.ru
+7 (910) 535-99-11