[ruby-on-rails] Ruby on Rails에서 Gemfile과 Gemfile.lock의 차이점은 무엇입니까?

저는 Ruby on Rails의 초보자이며 Rails 3.0.9를 사용하고 있습니다.

차이 무엇 GemfileGemfile.lock레일의는?



답변

여기 Gemfile에서 사용할 gem을 지정하고 버전을 지정할 수 있습니다.

Gemfile.lock파일은 Bundler가 설치된 정확한 버전을 기록하는 곳입니다. 이렇게하면 동일한 라이브러리 / 프로젝트가 다른 시스템에로드 될 때 실행 bundle install하면 최신 버전을 Gemfile.lock사용 Gemfile하고 설치하는 것이 아니라 정확히 동일한 버전을 보고 설치합니다. (다른 시스템에서 다른 버전을 실행하면 테스트가 중단 될 수 있습니다.) 잠금 파일을 직접 편집 할 필요가 없습니다.

확인 Bundler를의 목적 및 근거 , 버전 관리 섹션에 구체적으로 확인 코드를.


답변

일반적으로 Gemfile에 종속성을 다음과 같이 작성합니다.

gem "nokogiri", "~> 1.4.4"
gem 'bcrypt-ruby', '~> 3.0.0'
gem 'uglifier', '>= 1.2.3'
..

여기에서는 기본적으로 ” 1.4.4 버전 이상이면 nokogiri를 원합니다 .” 등을 말합니다. 이제 Gemfile 8 개월 전에 설정 했고이 요구 사항으로 앱을 성공적으로 설정 했다고 가정합니다 . 8 개월 전 nokogiri 버전은 1.4.4 입니다. 내 레일스 앱은이 버전에서 아무런 문제없이 완벽하게 실행되었습니다.

이제 내가 똑같이 만들려고한다고 생각해 Gemfile . 그러나 nokogiri 버전 을 살펴보면 현재 안정 버전이 1.4.9로 변경되었음을 알 수 있습니다. 즉, 빌드를 시도하면 번 들러가 버전 1.4.9 의 nokogiri를 설치합니다 (가 없다고 가정 Gemfile.lock).

무슨 뜻인가요 ?

당신이 아무것도 가지고 있지 않다면 보시다시피 다음을 Gemfile.lock실행하십시오.

bundle install

그러면 현재 사용되는 보석은 언제든지 다를 수 있습니다 . 앱은 1.4.4 버전을 사용했고 8 개월 전에는 아무런 문제없이 작동 하지만 지금 빌드하려고하면 하면 버전 1.4.9가 됩니다. 최신 버전의에서 손상 되었거나 1.4.4에서nokogiri 사용한 멋진 기능이 더 이상 제공되지 않는 등의 문제가있을 수 있습니다.

이러한 종류의 문제를 방지하기 위해 Gemfile.lock사용됩니다. 에서 Gemfile.lock단지 정확한 버전이 기록되며, 따라서 만이 설치됩니다. 즉,를 사용하여 앱을 배포하면 Gemfile.lock모든 머신에 동일한 gem이 설치되고 가장 중요한 것은 모두 동일한 버전을 갖게 됩니다. 이렇게하면 안정적이고 일반적인 배포 스택이 제공됩니다.

Gemfile.lock은 어떻게 생성됩니까?

다음과 같이 자동으로 생성됩니다.

bundle install

명령. 그 후 당신이 달릴 때마다bundle install 번들은 먼저 Gemfile.lock거기에 지정된 gem을 찾아 설치합니다. 일관되고 안정성을 제공하기 위해이 파일을 프로젝트간에 배포하는 것이 습관입니다.

Gemfile.lock을 업데이트하는 방법?

최신 버전의 앱에 만족한다면 업데이트 할 수 있습니다 Gemfile.lock. 에 대한 변경 사항을 반영하십시오 Gemfile. 즉, 종속성을 Gemfile. 실행 후 :

bundle install

그러면 Gemfile.lock최신 버전의 앱으로 업데이트 됩니다.


답변

Gemfile.lock

번들 설치를 실행하면 Bundler는 사용한 모든 gem의 전체 이름과 버전 (Gemfile (5)에 지정된 gem의 종속성 포함)을 Gemfile.lock이라는 파일에 유지합니다.

Bundler는 번들 설치를위한 모든 후속 호출에서이 파일을 사용하므로 애플리케이션이 시스템간에 이동하는 경우에도 항상 동일한 정확한 코드를 사용할 수 있습니다.

종속성 해결이 작동하는 방식으로 인해 겉보기에 작은 변경 (예 : Gemfile (5)의 gem 종속성 포인트 릴리스 업데이트)이라도 모든 종속성을 충족하기 위해 근본적으로 다른 gem이 필요할 수 있습니다.

결과적으로 Gemfile.lock을 버전 제어로 확인해야합니다. 그렇지 않으면 저장소 (프로덕션 서버 포함)를 체크 아웃하는 모든 머신이 모든 종속성을 다시 해결하므로 Gemfile (5)에있는 gem 중 하나가 사용되는 경우 다른 버전의 타사 코드가 사용됩니다. 종속성이 업데이트되었습니다.


답변