번들 exec 레이크를 사용하거나 레이크 만 사용 하시겠습니까?


81

다음과 같은 rake 명령을 사용하여 Rails를 배웠습니다 rake db:migrate. 그러나 나는 bundle exec rake ...평범한 대신을 사용해야한다고 읽었습니다 rake. 이제 어떤 것을 사용해야할지 혼란 스럽습니다.

bundle exec rake그냥 평범한 것 대신에 사용해야할까요 rake아니면 그냥 선호하는 것인가요? 어떤 통찰력이라도 대단히 감사하겠습니다! 감사!

답변:


126

bundle exec 번들 컨텍스트에서 명령을 실행합니다.

즉, Gemfile에 지정된 gem을 사용합니다. 대부분의 경우 running bundle exec rake foo은 방금 실행 한 것과 동일한 결과를 rake foo가져옵니다. 특히 Gemfile에서와 같이 시스템 전체에 동일한 gem을 설치 한 경우 더욱 그렇습니다. 그러나 일부 애플리케이션은 시스템 전체에 설치 한 것과 다른 버전의 gem을 지정할 수 있으며 정확한 gem과 버전이 올바르게 실행되기를 원할 수 있습니다. 를 사용하지 않고 실행 bundle exec하면 이상한 오류가 발생할 수 있습니다.

사용 bundle exec하면 프로그램이 gemfile에 지정된 환경에서 실행된다는 것을 보장합니다. 이는 프로그램 작성자가 실행하기를 원하는 환경임을 의미합니다. 즉, 어떤 이상한 설정을 사용해도 올바르게 실행되어야 함을 의미합니다. 너의 컴퓨터.

기본적으로 프로그램이 실행되는 환경을 표준화합니다. 이것은 버전 지옥을 피하고 삶을 훨씬 쉽게 만듭니다.

자세한 내용은 http://bundler.io/v1.3/man/bundle-exec.1.html 을 참조하십시오 .


4
당신이 입력 번들 간부의 모든 시간을 피곤 경우 필요하지 그래서, 당신은 RVM을 구성 할 수 있습니다 ruby.railstutorial.org/chapters/...
랜스 피셔

1
참고 : Bundle man 페이지가 변경 되었으며이
Americo Savinon 2013

1
사용의 좋은 부작용 은 Gemfile.lock 파일에 비해 누락 된 gem의 버전을 설치하기 위해 bundle exec실행해야하는지 여부도 알려준다는 것 bundle install입니다.
Jay Mitchell

당신은 그것을 아주 잘 설명했습니다 .. 감사합니다.
Arup Rakshit

5

$ bundle exec rake db : migrate
Gemfile에 지정된 rake 버전을 사용하여 rake 작업을 실행합니다 db:migrate.

그러나 Gemfile에 지정된 레이크 젬이 없습니다!
예,하지만 rake gem은 다른 gem의 의존성으로 설치되었습니다. Gemfile.lock을보세요. 따라서 규칙은 다음과 같아야합니다. Gemfile.lock에 지정된 레이크 버전을 사용합니다.

그러나 Gemfile.lock은 특정 버전을 지정하지 않습니다. xy보다 큰 버전을 지정합니다!
규칙은 다음과 같아야합니다. 현재 gemset에 설치된 rake 버전을 사용합니다.

$ rake db : migrate
일반적으로 명령 줄에서 명령 (예 : rake)을 실행하면 시스템이 PATH 환경 변수에 지정된 디렉토리 목록에서 명령을 검색합니다. 명령이 포함 된 첫 번째 디렉토리는 사용되는 명령의 버전입니다. 어떤 디렉토리인지 확인하려면 다음을 수행하십시오.

$ which rake

따라서 실행하면

$ rake db:migrate

는 설치가 아닌 다른 레이크 보석을 사용합니다 bundle install. 그러나 시스템이와 동일한 rake 버전을 발견하더라도 bundle execrake 소스 코드에 필요한 모든 gem은 프로젝트의 gemset 외부에서 검색됩니다. 따라서 다음과 같은 여러 가지 방법이 있습니다.

$ rake db:migrate

일을 망칠 수 있습니다.

Ruby on Rails Tutorial Book (무료 온라인), 섹션 3.6에 따르면 rvm 1.11.x +를 사용하는 경우 명령 앞에 bundle exec.


1

실행 파일없이 실행하면 bundle execRubygems가 시스템에 설치된 최신 버전의 gem을 가져옵니다.

bundle exec대신 접두사 를 추가하면 Gemfile.lock 컨텍스트에서 실행 파일이 실행됩니다. 즉, gem 파일에 정의 된 버전을 사용하여 실행됩니다.

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