번들러는 항상 여러 gem 서버에서 gem을 가져오도록 지원 했지만, 어떤 gem이 어떤 소스에서 오는지 항상 확실하지는 않았습니다. 더욱이 번들러는 버전업할 때 소스의 우선순위에 일관성이 없었습니다.
이런 이유로, 여러 최상위 source
를 가진
Gemfile
은 특정 gem이 어떤 gem 서버에서 가져올지를 확실하게
제어할 수 없었습니다. 이는 예상치 못한 소스에서 gem 코드를 설치하는
결과를 만들 수 있습니다.
Gemfile
에 하나의 source
만 가지는
애플리케이션은 영향이 없습니다.
Gemfile
에 :source
옵션이나 source
블록을 이용해 명시적으로 한 개 이상의 다른 루비젬스 저장소를 선택할 수
있습니다. 여러 최상위 gem 소스를 사용하는 것은 이제 권장하지 않습니다.
Gemfile
이 여러 최상위 gem 소스를 가지고 있다면,
bundle install
이 하나 이상의 소스를 가진 gem을 발견할 때
경고를 합니다. 이는 예상한 서버가 아닌 다른 gem 서버에서 "가로채는" 상황을
방지하기 위해 만들었습니다. 하위 호환성을 위해, gem은 여전히 설치 되지만,
번들러가 사용된 gem 서버 URL과 같은 이름의 gem이 발견된 다른 서버의 목록을
경고로 표시합니다. 명시적인 소스 선택으로 이 경고를 없앨 수 있습니다.
Gemfile
에 대해 완벽하게 하위 호환성이 있습니다.
Gemfile
에서 여러 gem 서버를 사용하는 애플리케이션을 가지고
있다면, 업그레이드 이후 모호한 gem 소스에 대한 경고를 보게될 수 있습니다.
경고가 나오건 나오지 않건, 번들러 팀은 여러 gem 서버를 사용하는 유저에게
Gemfile
에서 새로운 구문을 사용하는 것을 강력히 권합니다.
Gemfile
에서 새로운 source
구문을 사용하면
1.7.0 이전 버전의 번들러와 호환하지 않을 수 있습니다. 이 작업은 사용하는
모든 환경의 번들러를 업데이트한 이후에 해야 합니다.
https://rubygems.org
)를 고르고
Gemfile
의 제일 위에 둡니다.
source
줄에 블록으로 추가하고
관련된 gem의 선언을 그 안으로 옮깁니다.
예를 들어, 이 Gemfile
은
source 'https://rubygems.org' source 'https://gems.example.com' gem 'rails', '4.1.4' gem 'sqlite3' gem 'my_gem', '1.0' gem 'another_gem', '1.2.1'
이렇게 바뀔 수 있습니다.
source 'https://rubygems.org' gem 'rails', '4.1.4' gem 'sqlite3' source 'https://gems.example.com' do gem 'my_gem', '1.0' gem 'another_gem', '1.2.1' end
Gemfile
에서 부차적인 소스를 제거해 이 위험성을 완화하는
방법이 있습니다.
gems.github.com
나 gems.rubyforge.org
같은
오래된 공개 gem 서버를 사용 중이라면, 모든 요구된 gem은
rubygems.org
에 동기되어 있어야 합니다. 부가적인 소스를
지워 보세요.
rubygems.org
에는 없는 gem을 사용하지만, git 소스로 사용
가능하다면, gem 선언에서 :git
옵션을 사용해서 gem 서버가
아닌 git 저장소에서 가져오도록 할 수 있습니다.
vendor
디렉터리에
언팩해서 Gemfile
에서 gem을 선언할 때, :path
옵션을 사용해 언팩해둔 gem 디렉터리를 지정할 수 있습니다. 이 경우
소스 관리 시스템에 vendor해둔 gem을 커밋해야 합니다.