Я рекомендую 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
(облегчает открытие драгоценных камней). Bancler поместит двоичные файлы оболочки в .direnv/bin
(не более bundle exec
!).
+ rbenv
Также возможно использовать rbenv, добавив команду use rbenv
в любой файл .envrc
. Это активирует rbenv, который, в свою очередь, поместит оболочки ruby в PATH.
Обратите внимание, что для этого не нужно устанавливать rbenv в .bashrc или .zshrc.
+ RVM
Вот наиболее сложный .envrc, который я использую в проектах ruby:
rvm use 1.8.7
layout ruby
PATH_add .direnv/bundler-bin
rvm используется для выбора правильной версии ruby для вас
Команды компоновки автоматически устанавливают некоторые обычные переменные среды. Пока существует только рубиновый макет. Он устанавливает переменную среды GEM_HOME и ее каталог bin по вашему пути. Поскольку это зависит от версии ruby, обязательно вызывайте ее после «rvm». Так как каждый каталог макетов ruby имеет свой собственный GEM_HOME, вам не нужно использовать наборы гемов rvm.
PATH_add добавляет и расширяет заданный относительный путь. В этом случае я использую это для отделения binstubs-пакетов от моих собственных сценариев bin с bundle install --binstubs .direnv/bundler-bin
Если вы хотите узнать, что именно делают эти команды, сейчас: cat direnv stdlib
| меньше