2011-09-07 5 views
10

Gemfile에 추가 할 각 항목에 대해 gem 버전을 지정해야하는지 여부를 알고 싶습니다. 몇 가지 프로젝트가 있었지만 이전에는 모든 보석에 대한 버전을 지정하지 않았고 번들러 (Bundler)가 관리 했으므로 잘 작동했습니다.Gemfile에 강제적으로 Gemfile 버전을 지정할지 여부는 레일 응용 프로그램에 대해

하지만 최근에 나는 지난 6 개월 동안 개발중인 프로젝트가 거의 없었습니다. 그 프로젝트에서 많은 보석 버전이 Gemfile에서만 지정되었고 Gemfile.lock은 무시되었습니다. 이로 인해 마침내 버전 충돌이 해결되고 몇 가지 보석이 업그레이드되었습니다. 예후에 의해 좋은 기사 - -

는 또한 응용 프로그램 버전 컨트롤에서 Gemfile.lock을 제거하는 나쁜 관행이 있다고 알고있어 http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

그래서, 내 질문은 내가 Gemfile에에서 지정할 각각의 모든 보석의 버전을 지정해야합니다입니다 또는 이름을 지정하고 번들러가 버전을 관리 할 것인가? 이것을 처리하는 가장 좋은 방법은 무엇입니까? 모든 개발자가 보석의 동일한 버전을 가져야한다 -

UPDATE - 제대로 Gemfile sovles 많은 문제 :

PROB 1로 문제를 지정하려면이 질문을 업데이트

. 사실 Gemfile.lock을 버전 관리에 추가하면이 문제가 해결되었습니다. 개발자는 버전을 업데이트하기 때문에 '번들 설치'/ '번들'대신 '번들 업데이트'가 실행되도록주의해야합니다.

Prob 2 - 일부 보석 버전이 변경되면 브레이크 응용 프로그램 코드가 변경됩니다. 사실 omniauth를 사용하면 API가 한 버전에서 다른 버전으로 변경되므로 이러한 유형의 문제가 있습니다. 그리고 네, 응용 프로그램을 계속 사용하려면 버전을이 보석에 지정해야합니다.

내 Prob. - 그래서 내 gemfile에서 A와 B의 버전이 모두 엄격하게 지정되어 있고 종속성이있는 다른 버전의 Z에 의존하기 때문에 번들 설치 또는 번들 업데이트를 실행할 수 없습니다. 유일한 해결책은 버전을 제거하고 번들러가 전화를 걸도록하는 것이 었습니다. 그래서 내가 같은 질문을했습니다 - Gemfile.version_specification_mandatory? # => true/false

+0

좋은 질문입니다. 이것도 내 호기심에 대답, 나는 보석 버전을 지정했습니다! – fregas

답변

2

특정 버전에서만 사용할 수있는 것으로 보석을 사용하는 경우 버전을 지정해야합니다.

Bundler는 버전이 지정되지 않은 경우 시스템에서 최신 버전을 설치하거나 사용 가능한 버전을 사용합니다. 최신 버전에 필요한 기능이 있기 때문에 개발자에게 적합합니다. 하지만 같은 보석의 미래 버전에서 기능이 손실되고 버전이 Gemfile에 지정되지 않은 경우, 이후에 모든 사람이나 다른 기계에 보석을 설치하면 바람직하지 않은 영향이 발생합니다.

특히 3 페이지의 릴리스 후보 버전에 대해 이러한 문제가 발생했습니다.

+0

실제로 Gemfile.lock을 공유하면 위에서 언급 한 문제가 발생하지 않습니다. 처음 개발자가 보석을 추가하고 'bundler'를 실행하면 해당 버전이 잠기고 Gemfile.lock의 모든 개발자가 사용하게됩니다. 내가 정말로 알고 싶은 것은 Gemfile.lock이 특별히 버전을 잠글 수 있기 때문입니다. 여전히 Gemfile에 위임 된 버전을 지정해야합니까? – rtdp

6

나는 이 아니라고 생각한다. Gemfile에 보석 버전을 지정하는 것이 가장 좋습니다. 드물 긴하지만 최신 버전으로 앱이 중단 될 때 버전을 지정해야 할 수도 있습니다. 그러나 모든 보석의 버전을 지정하는 것은 대개 과잉입니다. Gemfile.lock 파일 (편집하지는 않지만 버전 관리에 체크인)을 사용하면 명시 적으로 업그레이드 할 때까지 최신 버전의 보석이 앱에서 사용되지 않도록 할 수 있습니다.

+0

예, 동의합니다. 나는 또한 정확히 내가 무엇을 찾고 있었는지에 대한 질문을 업데이트한다. 감사. – rtdp

관련 문제