Gemfile에서 로컬 젬을 어떻게 지정할 수 있습니까?


답변:


539

나는 당신이 이것을 할 수 있다고 믿습니다.

gem "foo", path: "/path/to/foo"

10
하드 코딩 된 경로는 빠른 해킹 세션에는 적합하지만 Bloudermilk의 로컬 젬 솔루션은 버전 관리중인 프로젝트에 더 효과적입니다. gem과 gem을 사용하는 프로젝트를 계속 확인하여 다른 사람들이 gem 소스를 체크 아웃하거나 동일한 경로를 공유 할 필요가 없도록합니다.
mahemoff

4
프로젝트 디렉토리에서 로컬 gem에 대한 .gitignored symlink를 사용하여 약간 더 깔끔하게 만들 수 있습니다. 따라서 두 프로젝트에서 소스 제어를 별도로 사용할 수 있고 다른 디렉토리는 동일한 디렉토리 구조를 갖지 않고도 동일한 작업을 수행 할 수 있습니다.
Dan

6
주의해야 할 사항은 Spring 일 수 있습니다. gem의 로컬 경로를 사용하는 경우 Rails 콘솔에서와 같이 캐시 된 버전의 로컬 gem을 확인할 수 있습니다. 로컬 보석 변경 사항이 적용되지 않는 것 spring stop같으면 실제로 문제가 있는지 확인하십시오.
Jason R

1
config / spring.rb에 로컬 gem 경로를 추가하면 rails console / server를 다시 시작한 후 로컬 gem 변경 사항을 픽업하는 데 도움이됩니다.
Jason R

4
더 나은 방법은 여기에 : rossta.net/blog/…
Cyzanfar

229

경로를 지정하는 것 외에도 (Jimmy가 언급 한대로) 다음 구성 옵션 을 사용하여 Bundler가 환경에 로컬 젬을 사용하도록 할 수도 있습니다.

$ bundle config local.GEM_NAME /path/to/local/git/repository

두 개의 gem 또는 gem과 rails 앱을 나란히 개발할 때 매우 유용합니다.

그러나 이것은 이미 의존성을 위해 git을 사용하고있을 때만 작동합니다.

# In Gemfile
gem 'rack', :github => 'rack/rack', :branch => 'master'

# In your terminal
$ bundle config local.rack ~/Work/git/rack

문서에서 볼 수 있듯이 .


BUNDLE_PATH(배포 용 패키지 빌드)를 사용하고 있기 때문에 이것에 문제가 있습니다. 제안한 작업이나 Jimmy의 답변을 할 때 using실제로는 내 BUNDLE_PATH폴더에 설치하지 않고 . 나는 이것을 알아낼 수 없었다. 어떤 도움?
Automatico

2
작동하지 않습니다이 주 gemspec 토론 당, 여기 .
davetapley

31
로컬 재정의를 비활성화하려면 :bundle config --delete local.GEM_NAME
alxndr

이 기능을 사용하려면 gem 라인에서 version 지시문을 제거해야했습니다.
Epigene

4
프로덕션과 개발시 다른 브랜치를 사용하려면 bundle config disable_local_branch_check trueBundler가 브랜치에 대해 불만 을 설정해야합니다 . 수표가 잘못된 커밋을 막는 것으로 간주되므로 조심하십시오 Gemfile.lock. 여기 문서 : bundler.io/v1.12/git.html
Leo

33

작업중 인 경우 git으로 로컬 gem을 참조 할 수도 있습니다.

gem 'foo',
  :git => '/Path/to/local/git/repo',
  :branch => 'my-feature-branch'

그런 다음 변경되면 실행합니다.

bundle exec gem uninstall foo
bundle update foo

그러나 모든 사람이이 두 단계를 수행해야하는지 잘 모르겠습니다.


5
이것은 훌륭하지만, gem을 적극적으로 개발하고 있다면 그렇게 편리하지는 않습니다. 모든 변경 사항을 커밋해야하고 bundle uninstall <gem> && bundle install 앱에 반영하려는 모든 변경 사항에 대해
Ramses

18

Rails 프로젝트에서 로컬 gem 저장소를 사용하려면 다음 단계를 따르십시오.

  1. gem 폴더가 git 저장소인지 확인하십시오 (gem 폴더에서 명령이 실행됩니다)

    git rev-parse --is-inside-work-tree
  2. 저장소 경로 가져 오기 (gem 폴더에서 명령이 실행 됨)

    git rev-parse --show-toplevel
  3. 레일스 애플리케이션에 대한 로컬 대체 설정

    bundle config local.GEM_NAME /path/to/local/git/repository

    여기서 GEM_NAMEgem의 이름이며 /path/to/local/git/repository명령의 출력입니다.2

  4. 응용 프로그램 Gemfile에서 다음 줄을 추가하십시오.

    gem 'GEM_NAME', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'
  5. 달리기 bundle install는 다음과 같은 것을 제공해야합니다.

    Using GEM_NAME (0.0.1) from git://github.com/GEM_NAME/GEM_NAME.git (at /path/to/local/git/repository) 

    GEM_NAME보석의 이름은 어디에 있습니까?/path/to/local/git/repository 관점에서가2

  6. 마지막으로을 실행 bundle list하지 말고 gem list다음과 같이 표시되어야합니다.

    GEM_NAME (0.0.1 5a68b88)

    GEM_NAME보석의 이름은 어디에 있습니까


몇 가지 중요한 경우를 사용하여 관찰하고 있습니다.

Rails 4.0.2  
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
Ubuntu 13.10  
RubyMine 6.0.3
  • RubyMine로컬 보석을 외부 라이브러리로 표시하지 않는 것 같습니다 . 버그에 대한 자세한 정보는 여기여기 에서 찾을 수 있습니다.
  • 로컬 gem에서 무언가를 변경할 때, Rails 애플리케이션에로드되기 위해서는 stop/startRails 서버를 사용해야 합니다
  • versiongem을 변경하면 stopping/startingRails 서버에서 오류가 발생합니다. 이 문제를 해결하기 위해 레일 애플리케이션에서 다음 Gemfile과 같이 gem 버전을 지정합니다 .

    gem 'GEM_NAME', '0.0.2', :github => 'GEM_NAME/GEM_NAME', :branch => 'master'

0

source : source: 'https://source.com', git repository (:github => 'git/url')및 local path로 gem을 참조 할 수 있습니다 :path => '.../path/gem_name'. 이 기사에서 Gemfile과 그 사용법에
대해 자세히 배울 수 있습니다 .


-4

당신도 지점을 원한다면 :

gem 'foo', path: "point/to/your/path", branch: "branch-name"

작동하지 않는 경우 오류가 발생합니다. Only gems with a git source can specify a branch.
KenB
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.