Rails 3 и замороженные джемы
Автор — Дмитрий Лихачёв, дата — 30.04.2010
3-и рельсы из-коробки работают с замечательной штукой – bundler, с которой многие костыли для поддержки замороженных джемов становятся ненужными.
Rubygems 1.3.6
Для работы bundler и rails 3 нужны rubygems версии 1.3.6. В Gentoo проблема решается достаточно просто:
# echo =dev-ruby/rubygems-1.3.6 >> /etc/portage/package.keywords/ruby
# emerge rubygems
Потом начинаются грабли
– все операции gem install начинают плеваться такой фигнёй
$ gem install bundler
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions into the /usr/lib64/ruby/gems/1.8 directory.
Решается просто:
$ echo "export GEM_HOME=~/.gem" >> ~/.bashrc && source ~/.bashrc
И еще один момент – обновленный рубиджемс использует новую схему хранения, посему чтоб исполняемые файлы установленных локально джемов были доступны мутим по аналогии:
$ echo 'export PATH="${PATH}:${GEM_HOME}/bin"' >> ~/.bashrc && source ~/.bashrc
Rails 3
Устанавливаем Rails 3
$ gem install rails --pre
Сгенерируем приложение и перейдём в него
$ rails app
$ cd app
Установка gem’ов
Предположим, что нам понадобился компас
$ echo "gem 'compass', '0.10.0.rc4'" >> Gemfile
Мы хотим, чтобы джемы были заморожены в приложение (чтобы было меньше проблем с deployment), поэтому сделаем так
$ bundle install .bundle/gems
$ bundle pack
после этого джемы будут установлены в папку .bundle/gems
Git’изация
немного седо-магии
$ sed -i 's|.bundle|.bundle/gems|g' .gitignore
$ sed -i '1i .bundle/environment.rb' .gitignore
$ git init && git add . && git commit -am 'initial commit'
Применение
В итоге у нас есть приложение в котором есть всё для вкусной и сладкой жизни.
Чтобы воспользоваться всеми прелестями нам нужен только bundler gem в системе
Бонусы
Development
$ rm ~/.gem -rf
Несмотря на это приложение будет рабочим, подтверждением чего служит успешный запуск
$ script/rails s
=> Booting WEBrick
=> Rails 3.0.0.beta3 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-04-29 16:29:10] INFO WEBrick 1.3.1
[2010-04-29 16:29:10] INFO ruby 1.8.7 (2010-01-10) [x86_64-linux]
[2010-04-29 16:29:10] INFO WEBrick::HTTPServer#start: pid=16514 port=3000
Deployment
$ git clone ...gitrepo..../app.git
$ cd app
$ bundle install # вот здесь и происходит самое вкусное - джемы берутся из vendor/cache и распаковываются в папочку .bungle/gems, попутно компилятся бинарные джемы
Таким образом, мы с минимальными усилиями можем развернуть приложение практически в любом окружении.
Выполнение команд из вмороженных джемов
Если мы хотим воспользоваться, например, командой compass, то можно выполнить её вот так:
$ bundle exec compass
ЗЫ: спасибо jenkek’у за pair writing ![]()
ЗЗЫ: тема пассажира и руби 1.9 пока не раскурена
Метки: freeze, gem, linux, Ruby on rails
В разделах: Из жизни команды



