티스토리 뷰
- rbenv 개념 및 사용 이유
rbenv는 루비의 버전을 독립적으로 사용할 수 있도록 도와주는 패키지 입니다.
기본적으로 Mac 같은 경우, 주로 뭔가 패키지를 설치할 때 Homebrew 명령어를 입력해서 설치를 하곤 하는데, Homebrew가 Ruby언어 기반입니다. 그렇다보니 Mac에서 ruby 명령어를 입력해보면 기본적으로 루비가 설치되어 있는것을 볼 수 있습니다.
하지만 위 사진에서 보시다싶이 Mac에 설치된 ruby는 기본적으로 OS에 기본적으로 의존되다 보니, 이런 일이 생길수도 있습니다 :
1) 현재 개발자가 진행하는 프로젝트는 2개이긴 하나, 각 프로젝트 별로 사용되는 Ruby 버전이 다릅니다.
* 2.6.3 버전, 2.3.3 버전
2) 개발자는 두 프로젝트를 자주 오가며 개발을 하는데, 프로젝트를 오갈 때 마다 ruby버전을 지우고 다시 설치하는 귀찮음을 반복해야 할 수도 있습니다.
위와같은 불편함을 감수하고자 탄생한게 rbenv 입니다.
rbenv를 통해 여러개의 ruby 버전 설치가 가능하면서, 매번 필요할 때 마다 간단하면서도 빠르게 여러 ruby 버전을 오갈 수 있습니다.
- RVM vs rbenv
저같은 경우에는 과거에는 쭈욱 RVM을 써왔다가, 최근들어 rbenv를 갈아탔습니다.
그리고 'RVM을 왜 안쓰고 rbenv를 써야해요?' 라는 의문이 들 수 있는데, 일단 결론적으로는 rbenv이 RVM에 비해 가볍습니다.
나중에 가면 ruby에서는 Gem이라고 불리는 라이브러리 version에 대한 dependency를 관리해야 할 일이 생기는데, rbenv는 dependency를 책임지는 라이브러리가 비생성 되다보니 이 덕분에 라이브러리 dependency도 함께 설치되는 rvm에 비해 가볍다는 장점이 있습니다. (어차피 후에 Rails에서 라이브러리를 관리하는 매니징이 따로 설치됩니다.; Bundler)
부록 Github : 당신이 rbenv를 써야하는 이유
- Chapter 1-1 : rbenv 설치 (ubuntu)
참고 해당 설명은 ubuntu OS 기준으로 작성되었습니다.
1. 터미널에 다음 명령어를 입력해서 rbenv 관련 github 자료를 pull 합니다.
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
2. 명령어를 통해 .bashrc 파일에 아래의 환경변수 내용을 자동으로 추가합니다.
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
3. 현재 열려진 shell에서 최신 .bashrc 으로 script가 실행되도록 reload 시킵니다.
source ~/.bashrc
4. 아래 명령어를 통해 rbenv가 제대로 설치했는지 확인합니다.
which rbenv
위와같이 .rbenv 이하 디렉터리로 표시되면 성공입니다.
5. rbenv에 ruby를 설치하기 위한 플러그인을 다운로드 합니다.
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
6. doctor을 통해 rbenv 패키지가 잘 설치됐는지 확인합니다.
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash
- Chapter 1-2 : rbenv 설치 (Mac OS)
참고 해당 설명은 Mac OS 기준으로 작성되었습니다.
1. homebrew 설치
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
2. rbenv 설치
brew install rbenv
참고 만약 아래와같이 에러가 발생할 경우
위와같이 에러가 생길 시 아래 명령어 입력
sudo chown -R $(whoami) /usr/local/share/zsh /usr/local/share/zsh/site-functions
chmod u+w /usr/local/share/zsh /usr/local/share/zsh/site-functions
3. rbenv 초기화
rbenv init
위 코드를 아래와 같이 .zshrc 에 옮겨써넣으세요.
4. 터미널을 껏다 키세요.
5. rbenv 설치 완료 및 doctor로 설치가 잘 됐는지 확인
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor | bash
- Chapter 2 : rbenv에 ruby 설치
참고 사전에 Chapter 1 대로 rbenv가 설치되어 있어야 합니다.
1. 설치하기를 원하는 버전의 ruby를 설치합니다.
# rbenv install [루비버전]
rbenv install 2.6.3
참고 1 설치 가능한 Ruby 버전 목록은 아래 명령어를 참고해주세요. (내용 참고: 공식문서)
# list latest stable versions:
rbenv install -l
# list all local versions:
rbenv install -L
참고 2, MAC OS 한정 깔고자 하는 Ruby 버전이 없나요?
그럴경우엔 homebrew를 업데이트 해보세요. [Stackoverflow 참고]
brew upgrade ruby-build
참고 3 AWS EC2 t2.micro 기준, 약 5분정도 걸렸습니다.
참고 4 만약 아래와 같이 에러가 발생한 메세지 중 no acceptable C compiler found in $PATH, 을 확인할 수 있을것입니다. 이는 C compiler가 설치가 안되었다는 것을 보여줍니다.
아래 명령어를 통해 추가적으로 C Compiler을 설치합니다.
sudo apt-get update
sudo apt-get install -y gcc
참고 5 만약 아래와 같이 에러가 발생한 메세지 중 make: command not found 을 확인할 수 있을것입니다. 이는 make 명령어 관련된 패키지 설치가 안되었다는 것을 보여줍니다.
아래 명령어를 통해 추가적으로 make 패키지를 설치합니다. :
sudo apt-get update
sudo apt-get install -y make
참고 6 기타적으로, 아래와 같이 패키지 설치가 요구되면 명렁어 그대로 입력해서 패키지 설치를 해주세요.
sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev
참고 7, MAC OS 한정 place parentheses around the 'sizeof(VALUE)' expression to silence this warning
Ruby 2.6.7 한정으로 자주 발생되는 에러같은지, 위 에러 키워드로 검색하니 바로 rbenv 2.6.7 설치도중 에러 발생 및 해결방법이 상위검색어에 나왔습니다. [참고 : Github Issue]
간단하게 아래 명령어를 입력하면 됩니다.
CFLAGS="-Wno-error=implicit-function-declaration" rbenv install 2.6.7
2. ruby 버전 설치가 끝난 후, 설치가 잘 됐는지 확인합니다.
rbenv versions
3. 하지만 위 사진을 보면 아직 ruby는 기존 OS에 설치된 ruby(system)를 가리키고 있습니다.
기본적으로 shell이 열리면 rbenv에 설치된 ruby를 가리키도록 바꿔주세요.
# rbenv global [rbenv로 설치된 루비버전]
rbenv global 2.6.3
참고 만약 현재 위치한 디렉터리에서 만큼은 다른 ruby를 가리키고 싶다면, 아래와 같이 설정해주면 됩니다.
# rbenv local [rbenv로 설치된 루비버전]
rbenv local system
여기까지 우리는 ruby를 독립적으로 설치/활용 준비를 해보는 과정을 진행해봤습니다.
'프로그래밍 공부 > Ruby on Rails : 배포' 카테고리의 다른 글
Capistrano + Nginx를 활용한 자동 배포 (9) | 2020.11.01 |
---|---|
Docker 설치 및 배포 (글 작성중) (0) | 2020.09.27 |
Nginx 개념의 이해 (1) | 2020.04.17 |
AWS : Elastic Beanstalk을 통한 서비스 배포 (0) | 2020.01.16 |