Gemfile에서 rubygem을 지정할 때 ~>와> =의 차이점은 무엇입니까?


120

Gemfile에서 다음과 같은 표기법 (~>)을 자주 봅니다.

gem "cucumber", "~>0.8.5"
gem "rspec", "~>1.3.0"

나는 부호 (> =)가 더 크거나 같다는 것을 알고 있지만, (~>) 표기법은 무엇을 의미합니까? 둘 다 같거나 큰 차이가 있습니까?



28
~>"정자 연산자"라고도합니다.
Andrew Grimm

3
Gemfile에서 Ruby 버전의 범위를 지정할 수 있습니까? 예ruby "~>2.0"
Dennis

1
또는라고 트위-wakka
SuckerForMayhem

@Dennis 여기에 귀하의 질문에 대한 답변이 있습니다 : stackoverflow.com/a/23116552/6359753
Henry Yang

답변:


165

그것은 비관적 인 버전 제약 입니다. RubyGems는 제공된 버전의 마지막 숫자를 증가시키고 최대 버전에 도달 할 때까지 사용합니다. 따라서 ~>0.8.5의미 상 다음과 같습니다.

gem "cucumber", ">=0.8.5", "<0.9.0"

그것에 대해 생각하는 쉬운 방법은 마지막 숫자가 임의의 값으로 증가해도 괜찮지 만 문자열에서 그 앞에 오는 숫자는 제공 한 것보다 클 수 없다는 것입니다. 따라서의 ~>0.8.5경우 세 번째 숫자 (5)는 5보다 크거나 같은 값을 사용할 수 있지만 선행 0.8은 "0.8"이어야합니다.

예를 들어 0.9 버전이 몇 가지 주요 변경 사항을 구현할 것이라고 생각하지만 전체 0.8.x 릴리스 시리즈가 버그 수정일 뿐이라는 것을 알고 있다면 이렇게 할 수 있습니다.

그러나, 단순히 사용 ">=0.8.5"함을 표시 임의 0.8.5이 허용 늦어도 버전 (또는 동일). 상한선이 없습니다.


backbone-on-rails 와 같이 버전 관리를 위해 4 자리 숫자를 사용하는 gem에서는 어떻게 동작 합니까?
JJD

2
@JJD : 기본적으로 동일한 동작이어야합니다. 4 개의 마지막 숫자는 제한없이 증가 할 수 있지만 세 번째 숫자는 그렇지 않습니다 (따라서 ~>0.9.2.3v0.9.2.4 또는 v0.9.2.23은 허용되지만 v0.9.3.0은 허용되지 않음). 제약 조건에 3 자리 숫자 만 지정했다면 4 번째 숫자는 본질적으로 관련이 없습니다. 지정한 처음 3 자리 만 기준으로 제한됩니다 (예 : ~>0.9.2무엇이든 상관없이 0.9.xy 시리즈 내의 모든 것을 허용 y합니다. 제약 조건은 다음과 같습니다. 9는 증가 할 수 없습니다).
eldarerathis

3
그러나 "RubyGems가 버전의 마지막 숫자를 증가시킬 것입니다"라는 규칙에는 예외가 있습니다. 한 숫자를 제공 할 때입니다. "~> 4"는 "모든 버전 4 이상"을 의미 할 수 있지만 그렇지 않으므로 주의하십시오.
hlascelles 2014-06-11

2
~> 0.1 대 ~> 0.1.0은 어떻습니까? "마지막 숫자가 임의의 값으로 증가해도 괜찮습니다"라고 생각하면 ~> 0.1은> = 0.1.0 <1.0.0으로 변환되고 ~> 0.1.0은> = 0.1.0 <으로 변환됩니다. 0.2.0. 그 맞습니까?
Wei

루비> = 2.4.4가 필요하다는 GitHub 프로젝트를 볼 때 2.5.1 및 심지어 루비 3을 포함하여 2.4.4 이후의 모든 루비를 지원한다고 가정 할 수 있습니까? 아니면 안전하게 플레이해야합니까 (즉, 2.4.4 이후에는 모든 루비를 지원할 것이라고 생각하는 대신 2.4.4 이전에는 루비를 지원하지 않을 것이라고 생각해야합니다)?
Henry Yang

3

@millisami 다음과 같은 비관적 제약 조건을 사용하여 gemspec에 종속성을 추가하는 데 사용할 수도 있습니다.

gem.add_runtime_dependency "thor", "~> 0.18.1"

gem 개발에 대해 잘 모르거나 그냥 들어가고 있다면 다음은 좋은 참고 자료입니다.

  1. 자신 만의 RubyGem을 만드는 방법, 이와 관련된 표준 관행 및 다른 사람이 설치할 수 있도록 업로드하는 방법을 알려주는 자습서입니다.
  2. Bundler로 처음부터 Gem을 만드는 방법

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