распаковка / заморозка драгоценных камней в приложении ruby ​​без рельсов - PullRequest
3 голосов
/ 10 июля 2009

Я пишу не-Rails-приложение ruby ​​(задыхаясь!) И хотел бы иметь возможность включать все зависимости gem, которые требуются приложению, в подкаталог поставщика. Это было бы похоже на то, как http://gemsonrails.rubyforge.org/ работает для приложений Rails.

Цель здесь - избежать ситуации, в которой моя команда в настоящее время находится, когда добавляется новая зависимость. Каждый разработчик в моей команде должен установить гем вручную, а затем кто-то должен вручную обновить каждый тестовый, подготовительный и рабочий компьютер. Если мы сможем заморозить зависимости в самом распределенном приложении, то все, что нужно, - это простое обновление svn (или git pull для тех хипстеров в толпе).

1 Ответ

4 голосов
/ 10 июля 2009

ОБНОВЛЕНИЕ (новое решение):

Попробуйте новый упаковщик Йегуды Каца драгоценный камень. gem install bundler затем создайте Gemfile со всеми вашими зависимостями. Для получения дополнительной информации см. Документацию.

Старая рекомендация:

Один простой способ - это просто вручную распаковать драгоценные камни в каталог vendor и добавить путь к lib распакованных драгоценных камней в начало $ LOAD_PATH.

Чтобы распаковать драгоценный камень:

$ cd vendor/gems
$ gem unpack active_support
Unpacked gem: '/path/to/myproject/vendor/gems/activesupport-2.3.2'

Просто убедитесь, что вы распаковали все необходимые гемы и их зависимости (используя правильные версии).

Чтобы добавить все драгоценные камни из vendor / gems в ваш $ LOAD_PATH, попробуйте добавить что-то вроде этого в инициализацию вашего приложения:

Dir.glob(File.join("vendor", "gems", "*", "lib")).each do |lib|
  $LOAD_PATH.unshift(File.expand_path(lib))
end

Обновление: Сара (в комментариях) убедила меня, что, возможно, также необходимо переопределить GEM_PATH. Вот один из способов сделать это:

require 'rubygems'
gem_paths = [File.expand_path(File.join("vendor", "gems")),  Gem.default_dir]
Gem.clear_paths
Gem.send :set_paths, gem_paths.join(":")

Другим вариантом является поиск Rip (Ruby's Intelligent Packaging) для управления вашими зависимостями. Рип выглядит очень мило, но все еще ново.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...