의존성 때문에라도 여러 버전의 루비를 설치하고 번갈아가며 쓰게 된다. 그리고 gem은 의존성 관리가 심각하게 필요하다. 이런 작업을 관리해주는 도구들이 있는데, 도구마다 역할이 조금씩 달라서 헷갈리지 않게 정리를 해보았다. 다음 4개만 알면 루비 쓰는데 큰 어려움은 없는 것 같다.

rbenv Ruby 버전 관리를 쉽게 해주는 도구. python의 virtualenv와 비슷한 역할을 한다. Ruby 버전에 의존성이 있어서 버전 교체가 필요한 경우에 사용한다. Ruby 설치도 rbenv로 하면 된다.

ruby-build plugin 형태로 설치되어, rbenv install 커맨드로 Ruby 특정 버전들을 쉽게 설치할 수 있다.

gem Ruby로 작성된 프로그램들이 원격 저장소에 gem이란 이름으로 모여있다. 각 gem은 이름, 버전과 플랫폼 세가지로 구별된다. 의존하는 gem이 있는 ruby 프로그램은 그래서 gem 버전이 달라서 실행이 안되는 골치아픈 일이 일어날 수 있다.

bundler gem 의존성 문제를 해결하는데 그나마 도움이 된다. 프로젝트 루트 디렉터리에 Gemfile 에 gem 의존성을 적어둔다. 그리고 bundle install 을 입력하면 작성해 둔 ruby 소스에서 요구하는 gem 들을 찾아서 설치해주는 편리한 도구이다.

설치

먼저 rbenv의 git repository를 clone한다. 쉽게 접근할 수 있도록 PATH 환경변수에 디렉터리를 등록한다. 그리고 초기화를 해주고 변경한 PATH를 적용해준다. 마지막으로 rbenv-doctor 스크립트로 설정이 잘 되었는지 확인한다.

$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
# Optionally, try to compile dynamic bash extension to speed up rbenv. Don't worry if it fails; rbenv will still work normally:
$ cd ~/.rbenv && src/configure && make -C src
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

$ ~/.rbenv/bin/rbenv init # follow the instructions to set up rbenv integration with your shell. This is the step that will make running ruby "see" the Ruby version that you choose with rbenv.
$ cat 'eval "$(rbenv init -)"' >> ~/.bash_profile

$ source ~/.bash_profile

$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
Checking for `rbenv' in PATH: /usr/local/bin/rbenv
Checking for rbenv shims in PATH: OK
Checking `rbenv install' support: /usr/local/bin/rbenv-install (ruby-build 20170523)
Counting installed Ruby versions: none
  There aren't any Ruby versions installed under `~/.rbenv/versions'.
  You can install Ruby versions like so: rbenv install 2.2.4
Checking RubyGems settings: OK
Auditing installed plugins: OK

그리고 ruby-build를 설치한다.

# As an rbenv plugin
$ mkdir -p "$(rbenv root)"/plugins
$ git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build

그러면 rbenv로 ruby를 설치할 수 있다.

# list all available versions:
$ rbenv install -l

# 의존 package는  ruby 설치 전에 미리 설치 해주자.
$ sudo apt-get install -y libssl-dev libreadline-dev

# install a Ruby version:
$ rbenv install 2.4.2

설치가 끝나면 rbenv에서 전역으로 사용할 ruby version을 설정을 해줘야 ruby관련 명령어를 사용할 수 있다. 그렇지 않으면, 명령어를 찾지 못한다는 에러 문구가 출력되며 실행이 되지 않는다.

bkim@bkimpi3-2:~ $ gem env home
rbenv: gem: command not found

The `gem' command exists in these Ruby versions:
  2.4.2

bkim@bkimpi3-2:~ $ rbenv global 2.4.2

bundler 설치

$ gem install bundler
#You don't need sudo to install gems. Typically, the Ruby versions will be installed and writeable by your user. No extra privileges are required to install gems.

gem이 설치되는 위치를 확인 하는 명령어

$ gem env home
# => ~/.rbenv/versions/<ruby-version>/lib/ruby/gems/...