Ruby On Rails 3.2.13 - Използване на различни Gemsets за Rails приложения

В момента имам няколко Rails приложения, изпълняващи версия 3.2.13, които използват Ruby 1.9.3. Планирам в крайна сметка да надстроя текущите си приложения до Rails 4.0, след което да надстроя Ruby до 2.0. Трябва внимателно да намеря време за преобразуване в Ruby 2.0, тъй като според моите разбирания Phusion Passenger ще се справи само с една версия на Ruby без някои решения за кървене от носа, които не планирам да се опитвам да внедря на този етап.

В момента използвам един gemset за всички мои Rails приложения. Бих искал да конвертирам моите Rails приложения едно по едно от 3.2.13 в текущата версия на Rails 4.0 в даден момент. Когато се опитах да актуализирам едно от моите приложения до по-нова версия на Rails, ми казаха, че трябва да направя команда за актуализиране на релси.

Това, което искам да направя, е да мога да стартирам някои от моите приложения с помощта на Rails 3.2.13 и други с помощта на Rails 4.0, докато не се уверя, че всички ще работят правилно под Rails 4.0. След като направя това, ще прегледам разликите между Ruby 1.9.3 (ако има такива) и ще надстроя всички тях, за да използват Rails 2.0. На този етап разбирам, че просто бих създал gemset за 2.0.0 или каквато и да е последната стабилна версия на Ruby 2.

Направих търсене в мрежата и проверих уебсайта на RVM. Разбирам как gemset-ите се присвояват на версията на Ruby, която искате да стартирате. Въпреки това не виждам нищо за използване на скъпоценни камъни със същата версия на Ruby, но използване на различни версии на Rails или други комбинации от скъпоценни камъни на една и съща машина за различни приложения. Може ли това да стане?

Всяка помощ ще бъде оценена.


person Pamela Cook - LightBe Corp    schedule 11.06.2013    source източник
comment
RVM ръководствата обясняват точно за какво говорите в първия пример.   -  person Mike Campbell    schedule 11.06.2013
comment
Това обяснява как да създадете различни gemset за различни версии на Rails, но не обяснява как да идентифицирате кой gemset да използвате за всяко приложение. Може би пропускам нещо.   -  person Pamela Cook - LightBe Corp    schedule 11.06.2013


Отговори (3)


Погледни отблизо! ;)

Първо създайте нов gemset с име, съответстващо на вашия проект https://rvm.io/gemsets/creating/ пр.: rvm gemset create project_name

След това създайте/редактирайте .rvmrc файл в директорията на проекта: rvm use 1.9.3@project_name

Една клопка е, че ако изпълните следните команди

cd some_project
cd ../other_project

и other_project не е посочил gemset, ще останете в some_project gemset. За да избегнете това, можете да създадете .rvmrc файл с gemset по подразбиране във вашата директория "projects" (ако имате такава)

person Mike Szyndel    schedule 11.06.2013
comment
В момента не използвам .rvmrc в моите проекти. Това може да обясни нещо друго, което току-що открих. Опитът ми беше да използвам един gemset за всички мои Rails приложения, но след като изброих gemsets, виждам, че по невнимание съм създал други. Изглежда моите скъпоценни камъни излизат извън контрол. Може да опитам друг вариант тук. - person Pamela Cook - LightBe Corp; 11.06.2013
comment
Можете също така да разгледате rbenv. Лично аз имам напълно различен подход, тъй като всичките ми приложения са Ruby 1.9.3. Казах на bundler да инсталира скъпоценни камъни в project_dir/.gems, така че за всеки проект имам разделяне на скъпоценни камъни по подразбиране. Вижте github.com/hajder/bootstrap-ruby-on-your-mac обаче не е пълен - person Mike Szyndel; 12.06.2013

Project Folder
|___Gemfile
|__.ruby-gemset
|__.ruby-version

 Gemfile with all the required gems mention in your project folder
.ruby-gemset should have gem set name like sample-gemset
.ruby-version file should have specific ruby version (e.g 2.0)

 rvm gemset list

ще покаже набор от скъпоценни камъни, създаден с sample-gemset и ще направи

инсталиране на пакет

който ще инсталира всички специфични скъпоценни камъни за този проект под sample-gemset, същото можете да направите за друг проект, за да създадете друг набор от скъпоценни камъни, по този начин можете да поддържате различни релси/скъпоценни камъни и рубин версия за различни проекти с rvm.

person Mahattam    schedule 05.09.2014

Вашият Gemfile.lock определя коя версия на всеки скъпоценен камък използвате - не е нужно да се притеснявате за набори от скъпоценни камъни.

bundle install винаги ще инсталира правилните версии и приложението ви винаги ще използва версиите в Gemfile.lock, дори ако има други версии, които витаят наоколо

person Frederick Cheung    schedule 11.06.2013
comment
Предпочитам, като вас, просто да използвам bundler, за да управлявам моите скъпоценни камъни, но това означава, че трябва да използвам bundle exec в случай, че имате множество версии на скъпоценни камъни, плаващи наоколо – заслужава да се спомене. - person Mike Campbell; 11.06.2013
comment
Само за пояснение: За да актуализирам едно от моите приложения да използва Rails 4.0, всичко, което трябва да направя, е да променя версията на Rails в моя Gemfile заедно с добавянето на номера на версията на Ruby, след което да направя пакетно изпълнение? Искам да съм сигурен, че това ще ми позволи да стартирам Rails 3.2.13 и Rails 4.0 в различни приложения. - person Pamela Cook - LightBe Corp; 11.06.2013
comment
bundle install / bundle update, за да актуализирате това, което е във вашия пакет, но иначе да. bundle exec е, когато искате да стартирате изпълними файлове от скъпоценни камъни (напр. bundle exec rails g migration Foo) - person Frederick Cheung; 12.06.2013
comment
bundle exec rails s, bundle exec rake ... и т.н. Това е така, защото в противен случай не изпълнявате изпълнимите файлове в контекста на вашия пакет, така че той ще използва най-новия gem във вашата система и ще се оплаква, когато не съвпада с вашия Gemfile. - person Mike Campbell; 12.06.2013
comment
Благодаря много за обяснението. - person Pamela Cook - LightBe Corp; 12.06.2013