Несколько источников Ruby Bundler в Gemfile

Мне нужно убедиться, что некоторые из моих драгоценных камней установлены из нашего собственного хранилища драгоценных камней, а не из rubygems, а остальные установлены из rubygems. Могу ли я настроить это в Gemfile, не беспокоясь о конфликте имен с драгоценным камнем с таким же именем в Rubygems? Как я могу определить, откуда загружен гем?

например Gemfile:

source :rubygems  
gem 'gemfromrubygems1'  
gem 'gemfromrubygems2'

source "http://our.own.gem.repo.com/the/path/to/it"  
gem 'gemfromourrepo'

person mawk044    schedule 18.04.2013    source источник


Ответы (4)


В Bundler 1.7 есть новая функция, которая позволяет вам выбирать источник для определенных драгоценных камней, вставляя их в блок:

source "https://rubygems.org"

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2'

source "http://our.own.gem.repo.com/the/path/to/it" do
  gem 'gemfromourrepo'
end

или указав его как опцию:

source "https://rubygems.org"

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2'

gem 'gemfromourrepo', source: "http://our.own.gem.repo.com/the/path/to/it"

Подробнее см. http://bundler.io/v1.7/gemfile.html.

person Tim Moore    schedule 14.08.2014

Согласно разделу «Приоритет источника» в справочной странице Gemfile. поиск осуществляется от последнего введенного до первого введенного.

Судя по тому, что вы сказали, похоже, что вы всегда предпочитаете свой драгоценный камень rubygems.org. Пока вам не нужно менять свои предпочтения (например, некоторые дубликаты из rubygems.org и некоторые дубликаты из вашего частного репо), ваша проблема решается просто с помощью следующего Gemfile:

source 'https://rubygems.org'
source 'http://our.own.gem.repo.com/the/path/to/it'

gem 'gemfromrubygems1'  
gem 'gemfromrubygems2'
gem 'gemfromourrepo'
person gtd    schedule 18.09.2013

Единственный способ, который я нашел, кажется ужасным взломом.

Bundler будет искать лучшую версию вашего драгоценного камня, начиная с источника, указанного последним, а затем выполняя поиск во всех источниках, перечисленных ранее. Неважно, где находятся исходные строки относительно линий драгоценных камней, только относительно друг друга.

Я пытался заставить его работать, используя :git и :path, но ни один из них не работает для гемсерверов. Это оставляет соответствие лучшей версии.

Если вы установите версию своего драгоценного камня на что-то вроде 2.mine.1 и отправите ее на свой сервер, вы можете ограничить версию в своем Gemfile.

source :rubygems
source 'http://myrepo'    
gem 'gemfromourrepo', '~> 2.ourrepo'

Тогда наилучшей подходящей версией должна быть версия с вашего сервера. Есть шанс, что кто-то сможет отправить свой собственный драгоценный камень с тем же именем с 2.ourrepo.2 в rubygems, но это маловероятно, если он уникален.

person Shawn Balestracci    schedule 18.04.2013
comment
Мне нравится это решение, потому что оно позволяет извлекать данные из производственной версии драгоценного камня, в то время как в процессе разработки я могу извлекать данные из разрабатываемой версии драгоценного камня. - person LisaD; 30.11.2013

Команда path может помочь. Это позволяет вам установить конкретные источники драгоценных камней

gem "foo", "1.0", :path => "bar"

Источник: http://bundler.io/v1.3/man/gemfile.5.html

person Btuman    schedule 27.08.2013