2013-04-18 3 views
28

rubygems가 아니라 우리 자신의 gem 저장소에서 일부 보석을 설치해야하며 나머지는 rubygems에서 설치해야합니다. Rubygems에서 동일한 이름의 보석과의 명명 충돌에 대한 걱정없이 Gemfile에 이것을 설정할 수 있습니까? 어떻게 보석을 어디에서 다운로드 할 수 있는지 결정할 수 있습니까?Ruby Bundler Gemfile의 여러 소스

예를 들어 Gemfile은 :

source :rubygems 
gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 

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

답변

4

내가 찾은 유일한 방법은 끔찍한 해킹처럼 보인다.

번들러는 마지막에 나열된 출처에서 시작하여 이전에 나열된 모든 출처를 검색하여 가장 우수한 버전의 보석을 검색합니다. 소스 라인이 보석 라인을 기준으로하는 상대적인 위치 만 중요합니다.

git 및 : path를 사용하여 작동하도록 만들려고했으나 gemservers에서 작동하지 않았습니다. 그게 최고의 버전과 일치 단풍.

보석의 버전을 2.mine.1과 같이 설정하고 서버로 밀어 넣으면 Gemfile의 버전을 제한 할 수 있습니다.

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

그러면 가장 일치하는 버전은 서버의 일치하는 버전이어야합니다. 누군가가 2.ourrepo.2와 동일한 이름의 자신의 보석을 루비 젬으로 밀어 넣을 수있는 기회가 있습니다. 그러나 그것이 유일하다면 그것은있을 법하지 않습니다.

+0

저는이 솔루션을 좋아합니다. 왜냐하면 개발 버전에서 보석의 개발 버전을 가져올 수있는 반면 생산 버전의 보석을 생산할 수 있기 때문입니다. – LisaD

5

: 그것은 당신이 보석을 특정 소스

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

소스

을 설정할 수 있습니다.

당신의 말에 따르면, 당신은 항상 rubygems.org 이상의 보석을 선호하는 것처럼 들립니다. 만큼 당신이 (즉 rubygems.org 일부 DUPS 및 개인의 repo에서 일부 DUPS.)를 다음 문제가 Gemfile을 다음과 같이 간단하게 해결된다 선호 변화 할 필요가 없습니다 같이

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

gem 'gemfromrubygems1' 
gem 'gemfromrubygems2' 
gem 'gemfromourrepo' 
44

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을 참조하십시오.