번 들러 대 RVM 대 gems 대 RubyGems 대 gemsets 대 시스템 루비 [닫기]


102

저는 Ruby를 처음 접했고 번 들러 대 RVM 대 gems 대 RubyGems 대 gemsets 대 시스템 문지름과 같은 개념에 대해 머리를 감싸려고 노력하고 있습니다.

누군가가 최신 버전의 Ubuntu를 새로 설치할 때이 모든 것을 관리하는 방법에 대한 '모범 사례'를 설명해 주시겠습니까? 무엇을 설치해야하며 모두 어떻게 사용해야합니까?

a를하는 sudo apt-get install ruby것이 권장되지 않는다고 생각하지만 확실하지 않습니다. 나는 '다른 모든 Ruby 항목'외에도 내 시스템에서 시도했습니다. 그것은 내 혼란을 더하고 있습니다. 저는 Rails에 대해 말하는 것이 아니라 일반적인 Ruby gem (예 : Vagrant, Chef, 스크립트)에 대해 이야기하고 있습니다.

답변:


184

이전 답변에 따르면 이것은 다루어야 할 내용이 많으므로 짧은 소개로 간주하십시오.

gem 은 Ruby 라이브러리가 패키징되는 방식입니다. Java에 대한 jar는 Ruby에게 있습니다. gem 파일 안에는 Ruby 코드 (.rb 파일)뿐만 아니라 테스트와 이름, 종속성 및 버전 ( gemspec )과 같은 gem 자체에 대한 정보를 제공하는 특수 파일도있습니다. 모든 Ruby 프로젝트는종속성을 선언하기 만하면 되는 Gemfile 을통해 필요한 gem을 정의 할 수 있습니다. Rubygems 는 패키지 관리자의 이름입니다. 패키지를 설치하는 데 사용되는 도구입니다 (Gem은 패키지 자체 임). Rubygems는 이제 Ruby의 일부입니다.

번 들러 는 보석 관리를 견딜 수있게 만드는 요소입니다. Gemfile을 기반으로 번들 설치 를사용하여 번 들러를 간단히 호출하면 필요한 모든 gem이 다운로드되고 설치됩니다. 표준 gem 명령을 사용하면gem install <gem_name>. Bundler는 Ruby의 일부가 아니지만 (자체 는 gem으로 패키지화되어 있습니다 ) 대부분의 응용 프로그램에서 "사실상 표준"입니다 (실제로 사용하지 않는 사람이 많지 않으며 실제로 사용하지 않을 이유도 없습니다).

RVM 은 시스템에 여러 버전의 Ruby를 설치하고 필요할 때 전환 할 수있는 도구입니다. 이것은 Ruby 1.8과 1.9 또는 심지어 "MRI"(Matz의 Ruby, 기본 구현)와 대안 (Jruby 또는 Rubinius와 같은)을 설치하는 데 사용할 수 있습니다. 이 필드에서 RVM은 단독이 아닙니다 .예를 들어 rbenv를 참조하십시오.

RVM 의 gemset 은 주어진 컨텍스트, 일반적으로 프로젝트에 특정한 gem 세트입니다. 예를 들어 각각 고유 한 gem 세트가있는 서로 다른 애플리케이션을 개발하고 이들을 별도로 유지하려는 경우 유용합니다.

시스템 Ruby 는 RVM을 사용할 때 시스템에 설치된 Ruby 버전입니다 (즉, RVM을 통하지 않음).

막 시작했다면 보석과 번 들러에 관심이 있습니다. 지금은 RVM과 gemset을 따로 두어도됩니다.


1
좋은 대답입니다. 명확히 해 주시겠습니까? gem과 RubyGems의 차이점은 무엇입니까? 그리고 gemspec과 Gemfile 사이에? 또한 위에 나열된 프로그램 (예 : 번 들러) 중 'Ruby'에 포함 된 프로그램과 별도의 응용 프로그램은 무엇입니까 (RVM은 별개라고 생각합니다)? 그리고 gemset은 RVM 내에서만 개념 일 뿐입니 까 아니면 핵심 Ruby에도 있습니까 (또는 다른 답변에서 언급 한 rbenv와 같은 다른 것)? 번 들러가 gem 관리를 더 쉽게 만든다면 번 들러 이전 방식은 무엇 이었습니까? (즉, 번 들러없이 보석을 어떻게 관리하겠습니까? 그렇게하지 않더라도 알아요.) 감사합니다!
user779159 2013 년

그래서 Rubygems는 'gem'명령으로 호출하는 패키지 관리자의 이름입니까? 번 들러도 Rubygems와 마찬가지로 Ruby 자체의 일부입니까, 아니면 어떻게 든 포함해야합니까?
user779159 17:24:23

2
"당신이 막 시작한다면 ... [y] ou는 RVM을 ... 잠시 놔둘 수 있습니다." OS X를 사용하지 않는 한, 설치하고 실행하려는 Ruby 프로젝트는 OS에 사전 설치된 버전보다 이후 버전의 Ruby에 의존합니다. 그러면 RVM이 필요합니다.
Hephaestus

이것은 사실이 아닙니다. "표준 gem 명령을 사용하면 각각 수동으로 설치해야합니다." "gem install"단일 명령을 사용하여 gemfile의 모든 gem을 확실히 설치할 수 있습니다.
Andy

1

Stack Overflow의 범위 내보다 한 가지 질문에 더 많은 정보를 요청하고 있습니다. 모든 것을 다루려면 책이 필요합니다.

Ubuntu에서는 Ruby의 "시스템"버전에 gem을 설치하고 제거하기가 쉽기 때문에을 통해 일반 gem을 설치하고 제거하는 데 익숙해집니다 sudo. (Mac OS에서는 Apple이 자체적으로 사용하기 위해 Ruby를 번들로 제공하기 때문에 다른 조언을 드리고 싶습니다.이를 엉망으로 만드는 것은 좋은 생각이 아닙니다.) 그런 다음 전체 gem 아이디어가 어떻게 작동하는지 아이디어가 있고 여러 시스템의 Ruby 버전은 " rbenv "또는 " RVM을 사용해보십시오. "을 사용 샌드 박스에 한두 버전을 설치합니다.

Linux는 배포판을 통해 Ruby를 쉽게 추가 / 제거 할 수 있지만 배포판 관리자가 패키지 한 버전으로 제한되어 있으므로 일반적으로 소스에서 설치합니다. 그러나 그것은 개발, 테스트 및 프로덕션 시스템을 위해 여러 버전의 Ruby를 관리 할 때 고통스럽기 때문에 rbenvRVM 이 발명 된 그들은 우리가 프로그래밍에 집중할 수 있도록 더러운 세부 사항을 처리합니다.

저는 rbenvRVM을 모두 사용했으며 지난 6 개월 동안 rbenv를 사용해 왔으며 좋은 결과를 얻었습니다. 내가 좋아하는 RVM보다 덜 복잡합니다. 두 경우 모두 별도의 Gems 세트로 다른 버전을 쉽게 설치할 수 있습니다. 원하는 경우 다른 터미널 창에서 다른 Ruby 버전을 열어 호환성을 쉽게 테스트 할 수 있습니다.

디버깅의 규칙 1은 한 번에 하나씩 변경하는 것이며, 이는 프로그래밍을 배우거나 새로운 언어를 배우는 경우에 해당됩니다. 산만하지 말고 단순하게 유지하십시오.


1
기본 시스템 패키지 관리자 (예 : apt 또는 apt-get) 이외의 패키지 관리자를 sudo하지 마십시오. 당신은 필연적으로 시스템을 엉망으로 만들 것입니다.
이미지
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.