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.