Рубиновый эквивалент virtualenv?

Есть ли что-то похожее на утилиту Python virtualenv?

В основном это позволяет вам устанавливать пакеты Python в изолированную среду, поэтому easy_install django не входит в каталог общесистемных пакетов в системе, он будет работать в каталоге, созданном virtualenv.

Например:

$ virtualenv test
New python executable in test/bin/python
Installing setuptools...cd .........done.
$ cd test/
$ source bin/activate
(test)$ easy_install tvnamer
Searching for tvnamer
Best match: tvnamer 0.5.1
Processing tvnamer-0.5.1-py2.5.egg
Adding tvnamer 0.5.1 to easy-install.pth file
Installing tvnamer script to /Users/dbr/test/bin

Using /Library/Python/2.5/site-packages/tvnamer-0.5.1-py2.5.egg
Processing dependencies for tvnamer
Finished processing dependencies for tvnamer
(test)$ which tvnamer 
/Users/dbr/test/bin/tvnamer

Есть ли что-то подобное для RubyGems?

Ответ 1

RVM работает поближе к тому, как работает virtualenv, поскольку он позволяет вам использовать отдельные версии ruby ​​и их драгоценные камни и т.д.

Ответ 2

Ни песочница, ни RVM, ни rbenv не управляют версиями зависимостей от приложений. Инструмент для этого - связка.

  • используйте Gemfile как объявление зависимости приложения
  • используйте bundle install для установки явных версий этих зависимостей в изолированное место
  • используйте bundle exec для запуска вашего приложения

Ответ 3

Никто, кажется, не упомянул rbenv.

Ответ 4

Думаю, вам понравится sandbox.

Ответ 5

Если вам нужно только установить gems как не root, попробуйте установить переменную среды GEM_HOME. Затем просто запустите gem.

Например:

$ export GEM_HOME=$HOME/local/gems
$ gem install rhc

Ответ 6

Я расскажу о том, как я это делаю с Bundler (который я использую с RVM - RVM для управления рубинами и набором глобальных драгоценных камней по умолчанию, Bundler для обработки конкретных проектов)

bundler install --binstubs --path vendor

Запуск этой команды в корне проекта будет устанавливать драгоценные камни, перечисленные в вашем Gemfile, поместить библиотеки в ./vendor и любые исполняемые файлы в ./bin и все require (если вы используете bundle console или Bundler требует) будет ссылаться на эти exes и libs.

Работает для меня.

Ответ 7

Я рекомендую direnv. Это оболочка среды для оболочки.

Перед каждым приглашением проверяется наличие файла ".envrc" в текущем и родительском каталогах. Если файл существует (и авторизован), он загружается в под-оболочку bash, и все экспортированные переменные затем захватываются direnv, а затем становятся доступными для текущей оболочки.

Вот как использовать direnv с ruby-install

+ ruby-install

Добавьте это в ~/.direnvrc

use_ruby() {
  local ruby_root=$HOME/.rubies/$1
  load_prefix "$ruby_root"
  layout_ruby
}

Установите ruby-install (brew install ruby-install) и установите кучу рубинов.

ruby-install ruby 1.9.3
ruby-install ruby 2.0.0
ruby-install ruby 2.2.0

И затем сделайте пару симлинк для удобства:

ln -s .rubies/1.9 ruby-1.9.3-p*
ln -s .rubies/2.0 ruby-2.0.0
ln -s .rubies/2.2 ruby-2.2.0

И, наконец, в любом проекте .envrc:

use ruby 2.0

Это поместит все драгоценные камни в каталог проекта .direnv/ruby (упрощает открытие драгоценных камней). bundler добавит двоичные файлы оболочки в .direnv/bin (не более bundle exec!).

+ rbenv

Также можно использовать rbenv, добавив команду use rbenv в любой файл .envrc. Это активирует rbenv, который, в свою очередь, поместит рубиновые обертки в PATH.

Обратите внимание, что для этого не нужно устанавливать rbenv в .bashrc или .zshrc, чтобы это работало.

+ RVM

Вот самый сложный .envrc, который я использую для ruby-проектов:

rvm use 1.8.7
layout ruby
PATH_add .direnv/bundler-bin

rvm используется для выбора правильной рубиновой версии для вас

Команды макета автоматически устанавливают некоторые обычные переменные среды. Пока существует только рубиновый макет. То, что он делает, задает переменную среды GEM_HOME и каталог bin для вашего пути. Потому что это зависит от версии ruby, обязательно вызовите ее после "rvm". Поскольку в каждом каталоге рубинового макета есть свой GEM_HOME, вам не нужно использовать rvm gemsets.

PATH_add добавляет и расширяет данный относительный путь. В этом случае я использую это, чтобы отделить binstubs от буфера от моих собственных скриптов bin с помощью bundle install --binstubs .direnv/bundler-bin

Если вы хотите узнать, что именно делают эти команды, пока: cat direnv stdlib | меньше

Ответ 8

Mineshaft - это проект, над которым я работал некоторое время и продолжаю работу по разработке.

Он предлагает возможность создавать виртуальные среды, сходные с тем, как работает virtualenv, а также может также устанавливать Ruby на глобальном уровне.