Ruby On Rails 3.2.13 — Использование разных наборов драгоценных камней для приложений 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, мне сказали, что я должен выполнить команду update 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. Я понимаю, как наборы драгоценных камней назначаются версии Ruby, которую вы хотите запустить. Однако я ничего не вижу об использовании наборов драгоценных камней с одной и той же версией Ruby, но с использованием разных версий Rails или других комбинаций драгоценных камней на одном компьютере для разных приложений. Можно ли это сделать?

Любая помощь будет оценена по достоинству.


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


Ответы (3)


Посмотрите внимательнее! ;)

Сначала создайте новый гемсет с именем, соответствующим вашему проекту 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 не указан набор драгоценных камней, вы останетесь в наборе драгоценных камней some_project. Чтобы избежать этого, вы можете создать файл .rvmrc с набором драгоценных камней по умолчанию в вашем каталоге «проекты» (если он у вас есть)

person Mike Szyndel    schedule 11.06.2013
comment
В настоящее время я не использую .rvmrc в своих проектах. Это может объяснить что-то еще, что я только что нашел. Моя попытка состояла в том, чтобы использовать один набор драгоценных камней для всех моих приложений Rails, но после перечисления наборов драгоценных камней я вижу, что я непреднамеренно создал другие. Похоже, мои драгоценные камни выходят из-под контроля. Я могу попробовать другой вариант здесь. - person Pamela Cook - LightBe Corp; 11.06.2013
comment
Вы также можете взглянуть на rbenv. Лично у меня совершенно другой подход, так как все мои приложения на Ruby 1.9.3. Я сказал сборщику устанавливать гемы в 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, то же самое вы можете сделать для другого проекта, чтобы создать другой набор драгоценных камней, таким образом вы можете поддерживать разные версии rails/gems и ruby ​​для разных проектов с помощью rvm.

person Mahattam    schedule 05.09.2014

Ваш Gemfile.lock определяет, какую версию каждого драгоценного камня вы используете — вам не нужно беспокоиться о наборах драгоценных камней.

bundle install всегда будет устанавливать правильные версии, и ваше приложение всегда будет использовать версии в Gemfile.lock, даже если есть другие версии.

person Frederick Cheung    schedule 11.06.2013
comment
Я предпочитаю, как и вы, просто использовать пакет для управления моими драгоценными камнями, но это означает необходимость использовать bundle exec в случае, если у вас есть несколько версий драгоценных камней, о которых стоит упомянуть. - person Mike Campbell; 11.06.2013
comment
Просто чтобы уточнить: чтобы обновить одно из моих приложений для использования Rails 4.0, все, что мне нужно сделать, это изменить версию Rails в моем Gemfile вместе с добавлением номера версии Ruby, а затем выполнить пакет exec? Я хочу убедиться, что это позволит мне запускать 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 ... и т. д. Это потому, что в противном случае вы не запускаете исполняемые файлы в контексте вашего пакета, поэтому он будет использовать самый последний гем в вашей системе и жаловаться, когда он не соответствует вашему Gemfile. - person Mike Campbell; 12.06.2013
comment
Большое спасибо за объяснение. - person Pamela Cook - LightBe Corp; 12.06.2013