mygem.gemspec 내부에 자식 분기 종속성이있을 수 있습니까?
나는 다음과 비슷한 것을 생각하고 있습니다.
gem.add_runtime_dependency 'oauth2', :git => 'git@github.com:lgs/oauth2.git'
...하지만 작동하지 않습니다.
mygem.gemspec 내부에 자식 분기 종속성이있을 수 있습니까?
나는 다음과 비슷한 것을 생각하고 있습니다.
gem.add_runtime_dependency 'oauth2', :git => 'git@github.com:lgs/oauth2.git'
...하지만 작동하지 않습니다.
답변:
이것은 가능하지 않으며, RubyGems가 gem 개발자가 gem에 액세스하기 위해 특정 버전 제어 시스템을 설치하도록 요구하는 것을 허용하는 것이 다소 부담 스러울 것이기 때문입니다. gem은 사람들이 가능한 한 광범위한 애플리케이션에서 사용할 수 있도록 최소한의 종속성으로 자체 포함되어야합니다.
자신의 내부 프로젝트를 위해이 작업을 수행하려면이 작업을 잘 지원 하는 Bundler 를 사용 하는 것이 좋습니다 .
편집하다
댓글 작성자에 따르면 이것은 더 이상 사실이 아닙니다. 역사적 맥락을 위해 보관 된 이전 정보.
Gemfile 및 .gemspec의 gem에 대한 참조를 복제하면 이제 Bundler에서 경고 메시지가 발생하는 것처럼 보이므로이 답변은 더 이상 사실이 아닌 것처럼 보입니다.
오래된 정보
Yehuda Katz 의이 기사는 저에게 유사한 혼란을 해결했습니다. 개발 용으로 만 사용하려면 git 항목을 gemfile에 추가하는 것이 가장 좋지만 해당 번 들러는 여전히 gemspec의 종속성 / 버전 정보를 사용합니다 (나에게 마법처럼 보이지만 Yehuda를 신뢰합니다).
gemspec
에서도 읽습니다. bundle install
따라서을 실행할 때 Bundler가 Gemfile에 지정된 gem을 설치한다는 것이 발생한다고 가정합니다 (그러나 테스트하지는 않았습니다). Bundler가 이미 설치했기 때문에 require
gem 저장소에서 가져온 것이 아니라는 사실에 관계없이 gem에서 젬을 사용할 수 있습니다 . 마법이 아닙니다. Bundler가 평소처럼 작동합니다.
나는이 문제도 알아 내려고 애썼다. 그리고 방금 다음과 같은 해결책을 찾았습니다 (귀하의 gem을 게시하거나 해당 oauth2 gem을 재배포 할 권한이 있는지 확실하지 않음).
oauth2 gem이 필요한 gem에서 이것을 실행하십시오.
git submodule add git@github.com:lgs/oauth2.git lib/oauth2
기본값과 다른 분기가 필요한 경우
cd lib/oauth2 && git checkout <branchname_or_ref>
cd .. && git add lib/oauth2
git commit -m "adding outh2 submodule"
gemspec에서 필요한 버전 라인 위에 이것을 추가하십시오.
$:.push File.expand_path('../lib/oauth2/lib', __FILE__)
또한 모든 oauth2 gem의 런타임 종속성을 gemspec에 추가해야합니다. 아직이 문제를 해결할 방법을 찾지 못했습니다.
이것이 내가 한 일이며, 우리 gem은 git을 통해 필요하기 때문에 이것이 rubygems 게시 된 gem에서 작동하는지 확실하지 않기 때문에 작동합니다.
gem 'my_gem', git: 'git@github.com:me/myrepo', submodules: true
경우 github에서 설치하는 경우 호스트 응용 프로그램에서 다음 을 사용해야 할 수 있습니다 .
나는 매우 간단한 해결 방법을 찾았습니다.
프로젝트에 참여 P
하고 tools
있으며 자체적으로 OS gem 을 사용하는 자체 제작 gem을 사용하고 싶다고 가정 해 보겠습니다 oauth2
.
당신이 패치를 만들었고 oauth2
당신의 gem에 그 패치가 필요하다면 tools
, 당신은 받아 들여진 대답 에 따라 gem에서이 문제를 고칠 수 없을 것 입니다.
그러나 projet의 Gemfile 내에서 원하는 버전을 지정할 수 있으며 이는 런타임시에서 P
사용되는 버전이됩니다 tools
.
gem 'oauth2', github: 'lgs/oauth2'