2011-09-30 3 views
1

각 플랫폼 (libxml 등)에서 빌드해야하는 것들을 제외하고는 가능한 한 많은 보석을 판매하고 싶지만 때로는 보석 서버에있는 보석보다 약간의 최첨단 코드를 사용하고 싶습니다 .어떻게 github의 코드를 vendor/gems에서 안정적으로 사용할 수 있습니까?

github gem을 공급 업체/보석에 직접 복제 할 수 있습니까? 내가 할 수있을 것 같아요,하지만 그것은 이미 자식 저장소입니다 내 애플 리케이션 코드에 영향을 미칠 것인가? 나는 모든 보석을 업데이트 할 필요가 없도록 무언가를 어지럽히 지 않도록 정기적으로 git pulls를 수행하고 싶다.

답변

6

vendor/gems의 사용은 대신에 BundlerGemfile을 사용하는 것이 좋습니다. 벤더 시스템은 컴파일 된 확장 기능에 대한 지원 부족을 포함하여 여러 가지 결함이있어 완벽한 솔루션이 아니 었습니다.

필요에 따라 Gemfile에서 버전을 잠그는 것이 좋습니다. 최첨단 버전을 사용하려면 버전 선언을 주석 처리하고 Gemfile.lock을 제거하고 bundle install을 다시 수행하십시오.

그것은 종종 보석의 게시 된 버전이 분기 및 고정에 의해 수리 할 필요가 결함이있는 경우, 그래서 그것을이 추적하기 쉽습니다 :

gem 'broken-gem', :git => 'git://github.com/myname/broken-gem.git' 

여기 장점은 Gemfile는 역할을한다는 것입니다 필요한 버전의 보석과 그 위치를 알려주는 문서. vendor/gems은 어둠 속에서 사람들이 그 버전이 어디서 왔는지에 관해 알려줍니다.

+2

또한'bundle package' 명령과도 관련이 있습니다 : http://gembundler.com/bundle_package.html –

+2

예고없이 모두 수정 : 보석을 업데이트하려면 전체'Gemfile.lock'을 제거하지 말고 그냥 번들 업데이트를 실행하십시오 '. 이 방법으로 당신은 이전 버전에 고정 된 다른 보석을 남기고 그 보석 및 그것의 의존성만을 갱신 할 것입니다. – Fabio

+0

꽤 알기 좋습니다. – tadman

관련 문제