Любой способ обойти повторную загрузку установленных драгоценных камней при использовании rvm? - PullRequest
1 голос
/ 09 декабря 2010

Я использую rvm с разными наборами гемов и мне это нравится.Единственная проблема, с которой я столкнулся, заключается в том, что, когда я создаю новые наборы гемов и выбираю те, которые хочу, мне нужно время, чтобы снова загрузить их заново.Есть ли способ сообщить rvm об использовании гемов, которые уже установлены в другом наборе гемов?

Например, скажем, у меня есть гемсет с именем set1 с установленным гемом wirble.Теперь я создаю новый rvm с именем set2.Если я "gem install wirble" на set2, то он снова загружает wirble.Любой способ заставить rvm использовать версию, которая уже есть в set1?

Редактировать 1: Спасибо всем или ответы до сих пор.Просто для более ясного объяснения, я нахожу странным то, что когда я хочу установить wirble и версия SAME EXACT уже установлена ​​на моем компьютере, почему «gem install wrible» нужно подключиться к Интернету и снова загрузить ту же самую вещь?Почему бы просто не установить с моего компьютера локально (т.е. в другом наборе гемов, в котором есть именно те файлы, которые мне нужны)

Редактировать 2: И я остаюсь в той же версии ruby.Так что мой пример предполагает, что я использую ruby ​​1.9.2.Я ТОЛЬКО меняю драгоценный камень.Я не понимаю, почему при установке "gem install wirble" нужно снова загружать его только для другого набора гемов (опять же на том же ruby ​​1.9.2)

Ответы [ 5 ]

1 голос
/ 09 декабря 2010

Другой вариант - использовать Bundler вместо наборов драгоценных камней RVM.Это не загрузит драгоценные камни, если они уже есть в вашей системе, и позволит вам иметь уникальный набор для каждого приложения.

0 голосов
/ 19 января 2014

Одна функция RVM, которая, кажется, не упоминалась, - copy. Это особенно полезно, когда:

  • вы хотите создать новый набор камней B , состоящий из большинства драгоценных камней, уже находящихся в вашем наборе A

  • Возможно, вы хотите выделить один драгоценный камень, в частности, и сравнить две версии. Или что-то.

Вы можете сделать следующее, в зависимости от контекста версии ruby:

rvm gemset copy 1.9.4-p448@old_gemset_name 1.9.3-p448@new_gemset_name

Эта команда создаст новый набор драгоценных камней, который является точным клоном старого, а затем вы сможете удалить и переустановить данный драгоценный камень. Я сделал это с Rspec, удалив 2.14.1 для сравнения с 3.0.0beta, вот так:

gem uninstall rspec -v2.14
gem install rspec -v3.0.0.beta1

Были некоторые другие деинсталляции, которые сопровождали это, но вы поняли идею. В результате я могу запустить два отдельных набора тестов, каждый в своих соответствующих каталогах и используя разные Rspec, просто переключая наборы гемов. <3 RVM. </p>

РЕДАКТИРОВАТЬ : получил идею от здесь .

0 голосов
/ 28 июля 2011

Погуглил "gem install from local cache":

http://akitaonrails.com/2011/05/29/rubygems-local-cache-hack

Это в основном кеширующий прокси-сервер, который использует публичный гем-сервер в качестве апстрима.

Более легкое решение:

Это позволяет вам выборочно устанавливать драгоценные камни (включая их deps):

  1. Переключиться на набор камней, на котором уже установлен желаемый драгоценный камень.
  2. Запустите "gem env", чтобы получить GEM_PATH, специфичный для набора гемов.
  3. cd к этому пути к гему, а затем к папке кэша.Вот все файлы .gem.
  4. Не выходя из этой папки, переключитесь на набор гемов, куда должен попасть нужный гем.
  5. Запустите установку gem как обычно, но передайте опцию --local.Нужный драгоценный камень и его сокровища должны автоматически извлекаться из текущей папки.

Если вы действительно хотите скопировать драгоценный набор, запустите эти шаги в кеше пути к драгоценному камню.На самом деле это не нужно, поскольку «копия набора гемов rvm» не загружается без необходимости.

  1. Убедитесь, что вы переключились на исходный набор гемсетов (из которого вы будете копировать).
  2. Запустите "rvm gemset export"
  3. Отредактируйте файл default.gems и удалите строки комментариев.
  4. Переключитесь на целевой набор gemset (в который вы будете копировать).
  5. RUN: gem install --local `cat default.gems`
  6. Необязательно: удалить файл default.gems.
0 голосов
/ 09 декабря 2010

Если вас беспокоит засорение серии трубок, вы можете посмотреть, возможно ли настроить gem-сервер на своей машине, используя gem server, и попросить rvm использовать это.

0 голосов
/ 09 декабря 2010

Это по замыслу. Держать их отдельно - вот и весь смысл. (Так что использование одного набора не влияет на другой и т. Д.)

Возможно, вы используете несколько наборов гемс, когда вам это не нужно? Например, вместо использования отдельного набора гемов для каждого приложения rails, просто используйте один. Например, я использую ruby-1.9.2-p0@rails3 для всех моих разработок rails 3.

Или, я полагаю, вы всегда можете просто скопировать их вручную из одного каталога rvm в другой (~/.rvm/gems/ruby-1.9.2-p0@rails3/gems/ в моей системе). Конечно, это будет работать только для драгоценных камней, которые компилируются для одной и той же рубиновой версии.

...