2016-07-07 5 views
0

rvm current은 특정 보석 세트로 전환했다고 말합니다. gem listrake 보석을 하나만 나열하므로, 왜 앞에 bundle exec을 추가해야합니까?왜 보석 세트를 사용할 때`bundle exec`가 필요한가요?

$ rvm current 
[email protected] 

$ gem list rake 

*** LOCAL GEMS *** 

rake (10.4.2) 

$ rake 
rake aborted! 
Gem::LoadError: You have already activated rake 10.4.2, but your Gemfile requires rake 11.1.2. Prepending `bundle exec` to your command may solve this. 
/home/rm/.rvm/gems/[email protected]/gems/bundler-1.12.5/lib/bundler/runtime.rb:35:in `block in setup' 
/home/rm/.rvm/gems/[email protected]/gems/bundler-1.12.5/lib/bundler/runtime.rb:20:in `map' 
/home/rm/.rvm/gems/[email protected]/gems/bundler-1.12.5/lib/bundler/runtime.rb:20:in `setup' 
/home/rm/.rvm/gems/[email protected]/gems/bundler-1.12.5/lib/bundler.rb:95:in `setup' 
/home/rm/.rvm/gems/[email protected]/gems/bundler-1.12.5/lib/bundler/setup.rb:9:in `<top (required)>' 
/home/rm/app/releases/20160707125838/config/boot.rb:3:in `<top (required)>' 
/home/rm/app/releases/20160707125838/config/application.rb:1:in `<top (required)>' 
/home/rm/app/releases/20160707125838/Rakefile:4:in `<top (required)>' 
LoadError: cannot load such file -- bundler/setup 
/home/rm/app/releases/20160707125838/config/boot.rb:3:in `<top (required)>' 
/home/rm/app/releases/20160707125838/config/application.rb:1:in `<top (required)>' 
/home/rm/app/releases/20160707125838/Rakefile:4:in `<top (required)>' 
(See full trace by running task with --trace) 

UPD는 나 자신이 더 명확 만들어 보자. rm gemset이 활성화되어 있습니다. rake 보석이 하나만 있습니다 (10.4.2). 그러나 rake-11.1.2bundler과 함께 설치되었습니다. bundle exec rake을 실행하면 rake-11.1.2이 호출됩니다. 그렇다면 gem에 의해보고 된 보석 목록에서 나는 그것을 볼 수없는 이유는 무엇입니까? 보석 세트가 보석 세트를 다른 것으로부터 격리시키는 것이 아닙니다.

아, 제작 기계라는 것을 잊어 버렸습니다.

답변

0

개발 기계 bundlergem과 같은 보석을 설치합니다. 그리고 당신은 gem list의 출력에서 ​​그들을 볼 수 있습니다. 프로덕션 서버에서는 대개 별도의 디렉토리에 설치됩니다. 그게 특히 --deployment 옵션입니다. 또는 --path 옵션을 사용하여 보석 위치를 변경할 수 있습니다.

1

레이크 호출에서 rake 11.1.2를 사용해야하지만 로컬 컴퓨터의 기본값은 rake 10.4.2이므로 번들 exec를 사용하여 호출을 추가하지 않으면 기본값 (10.4.2)이 사용됩니다. 번들 exec가하는 일은 항상 프로젝트 gemfile에 지정된 gem 버전을 사용하므로 번들 exec를 사용하는 것이 가장 좋습니다.

0

gemset을 올바르게 설정하지 않았습니까? 단일 보석 세트에 동일한 보석의 버전이 여러 개있는 경우 bundle exec를 사용해야합니다. 귀하의 프로젝트에 특정 gemset을 만들어 사용하십시오. 명시 적으로 작성하지 않은 경우 rvm은 기본 글꼴을 사용하여 보석을 과밀하게 처리합니다.