Да, гемы обычно устанавливаются в масштабе всей системы, или в вашем домашнем каталоге это невозможно.По умолчанию, когда ваше приложение использует гем, RubyGems загружает последнюю установленную версию.Если вы хотите использовать определенную версию, RubyGems позволяет сделать это с помощью следующего синтаксиса:
require 'rubygems'
gem 'RedCloth', '3.0'
Bundler - это полезный инструмент, который отслеживает версии гема, которые используются для разработки проекта, а затемпозволяет вам установить их одним махом с bundle install
, а также загрузить эти точные версии.Приложение загружает их, загружая код Bundler, который переопределяет части RubyGems для использования версий, указанных в Gemfile.
По умолчанию Bundler просто вызывает RubyGems для установки гемов (опять же, в масштабе всей системы или в вашем homedir).).Вы можете попросить его сохранить драгоценные камни в каталоге с именем vendor/cache
, используя bundle package
.Это позволяет вам «заморозить» драгоценные камни, чтобы вы могли распространять их с исходным кодом.
Если вам нужна дополнительная изоляция ваших сред Ruby, вы должны использовать RVM , что позволяет вам установитьотдельные наборы гемов и фактически разные версии Ruby для использования в разных проектах.Когда вы используете RVM, каталог, в который RubyGems устанавливает вещи, перезаписывается и зависит от вашей текущей версии Ruby и набора гемов.
Я бы рекомендовал прочитать документы для RubyGems и Bundler ;они оба довольно хороши.