по поводу джемсетов — желательно использовать bundler.
это безопаснее и удобнее. мы сетапим новый сервак, ставим rvm, нужную версию руби и все. а не ставим все нужные нам джемсеты.
для тех кто пишет приложения с использованием Ruby On Rails.
безопаснее тем что у каждого приложения все ему нужные гемы находятся в его папке и подставить модифицированный системный не получится.
удобнее тем что админу всего этого не надо для каждого проекта делать свой жемсет и не ставить все нужные жемы в этот жемсет.
При запуске bundle install под гемсетом 1.9.2@projectname, гемы устанавливаются в директорию /home/user/.rvm/gems/ruby-1.9.2-p180@projectname/gems
Так что никакой директории с гемами под отдельный проект нет. Есть только отдельный gemset
а я вам про капистрано. да и вообще bundler у себя можно настроить так что будет ставить жемы в папку с проектом, что очень удобно.
и тем более вы перестанете использовать rake, rails, etc без bundle exec.
Ну так в гемсетах и нет «модифицированных системных» никаких, просто гемы лежат не в текущей папке, а в системе (в отдельной папке своего гемсета). Про модификацию гема руками я даже не говорю, этим наверняка уже никто не страдает.
по поводу удобства: у меня в каждом проекте лежит .rvmrc, который автоматически создает гемсет. В глобальном гемсете у меня лежит только бандлер и одной простой командой все эти гемы ставятся в новый гемсет: изоляция идеальная.
Нет, я совсем не говорю, что бандлером пользоваться нельзя или не нужно, просто не нужно так категорично заявлять, что гемсеты использовать ну прямо никак нельзя. Разницы, по большому счету, нет совершенно никакой, все делают так, как конкретно им удобнее.
есть 3 варианта:
— ваш подход (гемы для проекта хранятся внутри проекта, отчего сам проект тяжелеет)
— мой подход (в Gemfile описаны необходимые гемы, при настройке проекта я выполняю bundle install и гемы скачиваются в папку чистого и свежего гемсета)
— устаревший вариант (без rvm: есть некий глобальный гемсет, куда сваливаются все гемы для всех проектов).
я не вижу разницы между первым и вторым вариантом, за исключением того, что я не храню гемы в репозитории с проектом.
ну по поводу третьего варианта я скажу то что бандлер туда как раз очень хорошо и вписываться.
rvm просто средство управления версиями руби в моём варианте.
а по поводу утяжеления проекта, скажу так что при деплое очень даже ускоряеться скорость bundle install, за счет того что нужные жемы у вас уже в папке. Для меня это важно, потому как у меня ноды поднимаются автоматом если нагругка выросла, и как бы чем быстрее она поднимется, тем лучше.
В .rvmrc использую комманду с ключом --create. Даже первым делом создаю этот файл echo «rvm 1.9.2@project_name — create >> project_name/.rvmrc И после cd в project_name гемсет сам создается. А уж потом делаю все остальное.
Устанавливаете две версии руби
rvm install ruby-1.8.7
rvm install ruby-1.9.2
Работаете с одним проектом из под rvm use 1.8.7, с другим rvm use 1.9.2
Чтобы не переключаться вручную можно создать файл .rvmrc в корневой директории каждого проекта.
ну так спрашивали по поводу разных версий руби и пассажира. Вариант ниже с запуском отдельных пассажиров с RVM не добавляет каких-то упрощений по сравнению с unicorn.
blog.phusion.nl/2010/09/21/phusion-passenger-running-multiple-ruby-versions/
Вкратце, они предлагают на системном руби ставить одни проекты (1.8.7), а потом с помощью RVM в стандалон-режиме запускать другие на той версии рубей, какая нужна для каждого проекта. Ну и на эти пессенджеры, отличные от системного заводить юзеров через РеверсПрокси.
Вот как, интересная идея.
А если через Passenger запускать системный Ruby 1.8, а через Unicorn + RVM пускать 1.9 как вариант обойтись без обратного прокси?
Эм… чето я немного не понимаю что вы хотите сделать? выставлять наружу Passenger или Unicorn? без apache или nginx перед ними? насчет пассенжера незнаю хорошая ли это идея, и вообще как это сделать, а вот насчет Unicorn'а скажу что это плохая идея. Он не расчитан на медленных клиентов, возьмите Rainbows!
RVM — подробно