X를 이미 활성화했지만 Gemfile에 Y가 필요합니다


128

실행 rake하면이 오류가 발생합니다.

레이크 0.9.2를 이미 활성화했지만 Gemfile에 레이크 0.8.7이 필요합니다. 번들 exec 사용을 고려하십시오.

bundle exec rake대신에 사용하는 것이 효과가있는 rake것 같지만 이것을 해결하는 가장 좋은 방법입니까?


이것이 RVM을 훌륭한 도구로 만드는 이유이기도합니다 . 각 프로젝트에 대해 별도의 보석 세트를 가질 수 있으므로 다시 발생할 염려가 없습니다.
rm-rf

답변:


84

사용하는 bundle exec 것이 올바른 방법입니다.

기본적으로 일어나는 일은 레이크를 0.9.2로 업데이트하여 Gemfile에 지정된 버전과 충돌한다는 것입니다. 이전의 최신 버전은 rakeGemfile의 버전과 일치했기 때문에 단순히 사용할 때 경고가 표시되지 않았습니다 rake.

Yehuda Katz (원래 번 들러 개발자 중 하나)는 이 블로그 게시물에서이 모든 것을 설명합니다 .

bundle exec ...항상 입력 하는 것을 피하기 위해 Bundler에서 일반적으로 사용하는 명령에 대해 쉘에서 별명 또는 함수를 설정할 수 있습니다. 예를 들어 이것은 레이크에 사용하는 것입니다.

$ type bake
bake is a function
bake () 
{ 
    bundle exec rake "$@"
}

5
블로그 게시물에는 실제로 많은 설명이 없습니다. 진짜 질문은 왜 처녀 루비는하지 않는 권리 종속성을 왜 다음 잘못된 것들을 것에 대해 불평?
Otheus

64

현재 버전 의 레이크 (또는 다른 gem이 문제를 일으키는 것) 를 유지할 이유가 있다면 , 매트 가 맞습니다 bundle exec. 이것을 수행하는 가장 좋은 방법은을 실행하는 것 입니다. 설치 한 최신 버전의 gem을 사용하는 대신 Gemfile에 지정된 버전을 사용합니다. (nathan.f77은 레이크를 실행할 때마다 입력하지 않으려는 경우 아래에 좋은 해결책이 있습니다bundle exec )

그렇지 않으면 레이크를 업데이트하지 않을 이유가없는 경우 다음을 실행할 수 있습니다.

bundle update rake

이것은 실제로 Gemfile.lock을 업데이트하여 실행하는 대신 최신 버전의 레이크를 사용합니다. bundle exec 매번 .

참고 : 이 명령을 실행하면 bundle update갈퀴 대신 Gemfile의 모든 gem이 업데이트됩니다. 어쩌면 원하는 것이 아닐 수도 있습니다. 응용 프로그램에서 문제가 발생하면 어떤 gem 업데이트가 원인인지 알 수 없기 때문입니다.


사용하지 않고 이전 버전을 유지하는 덜 권장되는 방법 bundle exec은 최신 버전의 레이크를 제거하는 것입니다.

$ gem 제거 레이크

제거 할 gem을 선택하십시오.
 1. 갈퀴 -0.8.7
 2. 갈퀴 -0.9.2
 3. 모든 버전
> 2
rake-0.9.2를 성공적으로 제거했습니다

이것은 작동하지만 다른 버전의 레이크를 사용하는 여러 응용 프로그램을 사용하는 경우 다른 버전을 지속적으로 설치하고 제거해야하기 때문에 어려움을 겪을 수 있습니다.


이것은 나를 위해 일했습니다. 어떤 이유로 하나의 버전 (0.8.7) 만 설치되었습니다. 그래서 먼저했다 gem install rake. 그런 다음 gem uninstall rake0.9.2를 선택했습니다.
B Seven

7
bundle update사용 가능한 최신 버전으로 버전이 지정되지 않은 gem도 업데이트합니다. 그것은 당신이 원하는 것이 아닐 수도 있습니다. bundle update rake더 많은 우세가 될 것입니다.
Alex Neth

나는과 같은 문제가 public_suffix아니라 rake. bundle update public_suffix불행히도 달리기 는 효과가 없습니다.
Dmitri Zaitsev


13

마지막으로 이런 일이 일어 났을 때 모든 보석을 업데이트했습니다. 나는 그것을했고 gem uninstall rake버전 옵션을 나열했다. 나는 더 새로운 것을 골랐다가 더 bundle exec이상 사용할 필요가 없었습니다.

기본적으로 사용 bundle exec하면 번들에 설치된 gem 버전을 사용하므로 Gemfile에있는 것이 무엇입니까? bundle exec그것 없이는 시스템 기본 버전을 사용합니다.


8

아! Katz 기사는 훌륭합니다!

이 솔루션이 가장 좋습니다.

bundle install --binstubs

이제 입력 할 수 있도록

bin/rake .stuff.

2.3과 3.0.9 앱을 모두 개발하고있는 나 같은 사람에게는 이것이 훨씬 나아졌다.


8

bundle exec 정확하지만 매번 입력하고 싶지는 않습니다.

이것을 .bashrc에 넣을 수 있습니다.

# Automatically invoke bundler for rake, if necessary.
rake() { if [ -e ./Gemfile.lock ]; then bundle exec rake "$@"; else /usr/bin/env rake "$@"; fi; }

명확히하기 위해 .bashrc 파일은 홈 디렉토리 [~ / .bashrc]에있을 것입니다. 이 파일은 새 터미널 창을 열 때마다로드됩니다.
Ryan

0

매번 입력하지 않는 또 다른 방법은 Makefile을 사용하는 것입니다.

rake :
    bundle exec rake
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.