rbenv: несколько экземпляров одного и того же ruby

У меня есть два скрипта, для которых требуется одна и та же версия Ruby. Однако для каждого сценария также требуется РАЗНАЯ версия драгоценного камня (нокогири). Один из сценариев будет работать с обеими версиями nokogiri (1.6.2.1 и 1.6.1). Однако другой скрипт будет работать ТОЛЬКО с версией 1.6.1; а если установлена ​​1.6.2.1, скрипт нормально не запустится.

Я знаю, как установить несколько версий Ruby с помощью rbenv. Но можно ли установить несколько экземпляров ОДНОЙ версии Ruby (2.1.2)? Если да, то как?


person tSquirrel    schedule 03.07.2014    source источник


Ответы (5)


Сделайте локальную копию файла определения ruby-installer, используя пользовательское имя.

$ cp ~/.rbenv/plugins/ruby-build/share/ruby-build/2.1.5 2.1.5-nokogiri161

Установите это как файл пользовательского определения, никаких правок не требуется.

$ rbenv install ./2.1.5-nokogiri161

Теперь у вас есть рубиновая версия с произвольным именем, и вы можете установить на нее пользовательские гемы.

$ rbenv shell 2.1.5-nokogiri161
$ gem install nokogiri -v 1.6.1

Это также полезно для установки версий ruby ​​с пользовательскими флагами сборки. Например, отладочная сборка без оптимизации компилятора.

$ cp ~/.rbenv/plugins/ruby-build/share/ruby-build/2.1.5 2.1.5-debug
$ RUBY_CONFIGURE_OPTS="optflags=-O0" rbenv install ./2.1.5-debug
$ rbenv shell 2.1.5-debug
person ender672    schedule 13.11.2014

Я вижу два варианта:

  1. У вас могут быть разные Gemfile, и пусть упаковщик позаботится об установке правильной версии gem. Если скрипты находятся в разных каталогах, это не должно быть проблемой.

  2. Вы можете использовать rbenv-gemset, чтобы иметь отдельные гем-окружения

Несомненно, их больше, но эти два кажутся самыми простыми для вашей установки.

person kronn    schedule 03.07.2014

1) Используйте rvm вместо rbenv, и с помощью его функции под названием «gemsets» вы можете использовать разные версии драгоценных камней для одной версии ruby.

rvm 2.1.1
rvm gemset create first second
rvm 2.1.1@first
gem install nokogiri -v 1.6.1
rvm 2.1.1@second
gem install nokogiri -v 1.6.2

2) или вы можете использовать упаковщик

gem install bundler
/dir_1/Gemfile
source 'http://rubygems.org'
gem 'nokogiri', '1.6.1'

/dir_2/Gemfile
source 'http://rubygems.org'
gem 'nokogiri', '1.6.2'
person edikgat    schedule 03.07.2014

Можно создать несколько экземпляров одного и того же ruby ​​(независимо от того, какой инструмент их устанавливает), просто скомпилировав их вручную с другой настройкой --prefix.

  • скачать источник
  • извлечь его
  • ./configure --prefix=~/.rbenv/version/2.1.2-tSquirrel
  • make
  • sudo make install

Вот как rbenv-docs предлагает достичь этого.

Вы также можете переименовать текущий каталог "2.1.2", а затем использовать ruby-build для установки 2.1.2 еще раз.

person kronn    schedule 04.07.2014

«Версии» в rbenv — это просто каталоги в ~/.rbenv/versions, я предполагаю, что вы просто переименовываете/копируете установленную версию, и когда вы «выбираете» версию с «оболочкой rbenv», вы просто объявляете, из какого каталога вы хотите использовать двоичные файлы .

person MBO    schedule 04.07.2014