[Ruby] RVM에서 rbenv로 옮기기

많은 루비 개발환경에서 RVM을 사용하는것을 볼 수 있는데요, 요즘들어 rbenv로 많이들 갈아타는 추세인것 같습니다. 이유를 물어봤더니 RVM이 사용하기 복잡하고 시스템 환경을 너무 많이 변경시킨다는 말씀들을 하시더군요. rbenv(Ruby Environment)의 경우 매우 간단한 구조로 되어있다고 하여 저도 갈아타기로 하였습니다.

rbenv는 특이하게 shims라는 방식을 사용하여 루비를 관리합니다. 환경변수 PATH의 값을 확인해 보면 다음과 같이 맨 앞에 shims가 추가된것을 볼 수 있습니다.

~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin

rbenv는 rehashing이라는 작업을 통해 shims디렉토리 안의 erb, gem, irb, rake, rdoc, ri, ruby, testrb를 현재 사용중인 루비의 실제 바이너리와 연결합니다.

다음의 모든 진행은 Homebrew가 설치되어있는 맥시스템이라고 가정하고 진행합니다.

1. 설치되어있는 RVM 제거 하기

다음의 명령을 사용하여 간단하게 rvm을 제거할 수 있습니다.

$ rvm implode

기존에 환경변수 (~/.bash_profile 등)에 추가했던 설정들도 찾아서 제거해줍니다. 다음과 같은 부분입니다.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

 2. rbenv 설치하기

Homebrew를 이용하면 손쉽게 설치가 가능합니다. 다음과 같이 설치를 진행해 줍니다.

$ brew update
$ brew install rbenv
$ brew install ruby-build
$ rbenv rehash

환경변수 설정을 추가해줍니다. ~/.bash_profile이면 됩니다.

if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

 3. 원하는 Ruby 버전 설치하기

다음과 같이 설치가능한 모든 루비 버전을 확인할 수 있습니다.

$ rbenv install -l
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p334
  1.8.7-p352

  ...

제가 쓰려는 2.0.0-p353버전을 설치해 보겠습니다.

$ rbenv install 2.0.0-p353
Downloading ruby-2.0.0-p353.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/78282433fb697dd3613613ff55d734c1
Installing ruby-2.0.0-p353...
Installed ruby-2.0.0-p353 to /Users/dennis/.rbenv/versions/2.0.0-p353

 4. Ruby 버전 변경하기

다음과 같이 현재 시스템에 설치되어있는 루비 버전을 출력할 수 있습니다.

$ rbenv versions
* system (set by /Users/dennis/.rbenv/version)
  2.0.0-p353

이제 조금전에 설치한 2.0.0-p353으로 사용하려는 루비를 변경해 보겠습니다.

$ rbenv global 2.0.0-p353
$ rbenv versions
  system
* 2.0.0-p353 (set by /Users/dennis/.rbenv/version)

변경된것을 확인할 수 있습니다. global은 전역 설정을 변경하는 옵션입니다. local을 사용할 경우 현재 디렉토리에 설정파일을 추가하며 프로젝트별로 루비 버전을 설정할 때 사용합니다. shell을 사용할 경우 현재 쉘이 종료될때까지 루비 버전이 설정됩니다.

$ ruby --version
ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin13.0.0]

루비 버전이 정상적으로 변경된것을 확인할 수 있습니다.

5. Bundler 설치하기

RVM과는 달리 Bundler가 기본 설치되지 않기 때문에 다음의 명령을 사용하여 추가적으로 설치를 해주어야 합니다.

$ gem install bundler
$ rbenv rehash