2014-10-23 1 views
2

두 개의 Ruby gem을 동시에 개발 중입니다. 그 중 하나는 다른 것에 의존합니다. 내 보석 이름이 "foo"및 "bar"라고 가정 해보십시오. "바" "foo는"에 따라, 그래서 그 gemspec이 포함되어 있습니다 : "foo는"이 배치되어 있기 때문에 나에게 오류를 줄 것이다 지금 bundle install를 실행, 물론Bundler는 지역 보석을 "이미 설치 한"것으로 간주합니까?

source "https://rubygems.org" 

gemspec 

:

s.add_runtime_dependency "foo", "~> 0" 
# More dependencies... 

그리고 내 Gemfile 로컬 폴더에 저장합니다.

의존성 줄을 주석 처리하고 싶지 않으며 로컬 폴더를 가리키고 싶지 않습니다. 결코 로컬 변경이 아니므로 내 힘내 저장소에 커밋하십시오. 그것은 git status 아래의 공간을 차지할 것이고 파일을 수정해야 할 때가 될 것입니다.

Bundler가 "foo"의 위치를 ​​알 수있는 환경 변수로 수행 할 수있는 트릭이 있고 "이미 설치되어있는"것으로 간주하고 싶습니다. 그게 가능하니?

답변

1

이 속임수는 번들러를 사용하여 수행됩니다.

은의 그 보석 foo는이 보석 에 달려 있다고 가정 해 봅시다. 그런 다음 foo는의 Gemfile에, 보석 를 가리 키도록 들러의 경로 옵션을 사용 그 후

gem "bar", path: "/home/wayne/lab/bar" 
다음

bundle install

"등 bundle exec rspec, bundle exec rake features와 같은 보석을 사용합니다 명령 bar "를 로컬 폴더에서 제거하십시오.

완료되면 Gemfile의 gem "bar" 줄을 정상 형식으로 되돌립니다.


Gemfile 수정을 영구히 유지하려면 몇 가지 옵션이 있습니다. 하나는 변경 사항을 확인하는 것입니다. Gemfile source priority에 따르면 Bundler는 먼저 로컬 경로에서 보석을로드하려고 시도한 다음 글로벌 소스에서 설치하려고합니다.

보석이 공개 된 경우 로컬 수정으로 보석을 복제하는 사람이 혼동을 줄 수 있습니다. Gemfile 그냥 코드를 루비되기 때문에이 경우, 당신은 예를 들어, 환경 변수가 위치 변경을 설정하려면 사용할 수 있습니다

# When making concurrent modifications to gem "bar", 
# use that gem by its local directory. 
if ENV['BAR_GEM_PATH'] 
    gem "bar", path: ENV['BAR_GEM_PATH'] 
end 
+0

그건 깔끔하지만, 내가 결코 피하지 않을 로컬 수정을해야한다는 것을 의미합니다.만약 내가 그걸로 괜찮 으면, 나는 단지 "foo"라인을 완전히 제거 할 수있다. 그러면 dependler를 설치할 때 bundler가 불평하지 않을 것이다. – Hubro

+0

지금 내 질문에 좀 더 정교 해졌습니다. – Hubro

+0

좋습니다.이 질문은 약간 잘못되었습니다. 나는 실제로'path :'옵션을 제거 할 필요가 없으며 안전하게 고칠 수있다. [Gemfile source priority] (http://bundler.io/man/gemfile.5.html#SOURCE-PRIORITY)에 따르면, Bundler는 * 처음 * 로컬 경로에서 보석을로드하려고 시도한 다음 다시 설치를 시도합니다 글로벌 소스에서. 당신은 아마도 그것을 당신의 대답으로 편집해야합니다. – Hubro

0

당신이 .gemspec에서 그것을 할 수 없어, 같이 넣어주십시오 내 특급

gem 'gem_name', path: 'full/path/to/your_gem' 

코드

다음, 당신이 rubygems.org 한 보석을 업로드 할 경우 s.add_runtime_dependency "foo", "~> 0"을 사용할 수 있습니다, 동시에 두 개의 보석을 dev에 가장 좋은 방법입니다,하지만 당신은 싶어 변경 보석 "foo는"코드의 경우, 다른 proj에서 upadate하면 ​​ bundle install을 다시 실행해야합니다. 그렇게하는 것은 시간 낭비입니다.

+0

그래, 그건 가능한 해결책이 아니야. 프로젝트를 진행하는 동안 "바"프로젝트는 항상 최신 개발 버전 인 "foo"를 가져야하므로 모든 작은 파일 변경에 대해 보석을 출시하는 것은 의문의 여지가 없습니다. – Hubro

관련 문제