다음과 같은 rake 명령을 사용하여 Rails를 배웠습니다 rake db:migrate
. 그러나 나는 bundle exec rake ...
평범한 대신을 사용해야한다고 읽었습니다 rake
. 이제 어떤 것을 사용해야할지 혼란 스럽습니다.
bundle exec rake
그냥 평범한 것 대신에 사용해야할까요 rake
아니면 그냥 선호하는 것인가요? 어떤 통찰력이라도 대단히 감사하겠습니다! 감사!
다음과 같은 rake 명령을 사용하여 Rails를 배웠습니다 rake db:migrate
. 그러나 나는 bundle exec rake ...
평범한 대신을 사용해야한다고 읽었습니다 rake
. 이제 어떤 것을 사용해야할지 혼란 스럽습니다.
bundle exec rake
그냥 평범한 것 대신에 사용해야할까요 rake
아니면 그냥 선호하는 것인가요? 어떤 통찰력이라도 대단히 감사하겠습니다! 감사!
답변:
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 을 참조하십시오 .
bundle exec
실행해야하는지 여부도 알려준다는 것 bundle install
입니다.
$ 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 exec
rake 소스 코드에 필요한 모든 gem은 프로젝트의 gemset 외부에서 검색됩니다. 따라서 다음과 같은 여러 가지 방법이 있습니다.
$ rake db:migrate
일을 망칠 수 있습니다.
Ruby on Rails Tutorial Book (무료 온라인), 섹션 3.6에 따르면 rvm 1.11.x +를 사용하는 경우 명령 앞에 bundle exec
.