developer tip

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

optionbox 2020. 7. 27. 07:51
반응형

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


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

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

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


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

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

Yehuda Katz (Bundler 개발자 중 한 명)는 이 블로그 게시물에서이 모든 것을 설명합니다 .

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

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

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

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

bundle update rake

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

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


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

$ gem 제거 레이크

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

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


시험 bundle clean --force

이 번들에없는 모든 시스템 젬을 제거합니다


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

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


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

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

bundle install --binstubs

이제 입력 할 수 있도록

bin/rake .stuff.

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


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; }

참고 URL : https://stackoverflow.com/questions/6317980/you-have-already-activated-x-but-your-gemfile-requires-y

반응형