2024-04-07T13:04:33.000Z
나는 React Native의 Ruby Version Manager로 rvm을 사용하고 있었으나, CTO님의 적극적인 영업으로 rbenv를 대신 사용해보기로 하였다.
실제로 rvm은 homebrew로 설치할 수 없 기에 별도 복잡한 설치과정이 필요한데다, 사용법도 제법 복잡하다고 느끼고는 있었다.
Node Version Manager로 nvm을 사용하고 있던 내게 n이라는 훨씬 가볍고 (거의 10배 차이), 사용법이 무척 간단한 대체제를 소개해주셨던 CTO님이셨기 때문에, 이번에도 믿고 바꿔보기로 하였다. 🫡
$ brew install rbenv
$ rbenv install 2.7.8터미널에 brew install rbenv 명령어를 사용하여 rbenv를 설치하였고, 이를 통해 ruby 2.7.8 버젼을 설치하였다.
그런데 🚨문제가 있다. rbenv로 설치한 ruby를 전혀 인식하지 못한다는 것이다.
위 사진의 starship 프롬프트를 보면, rbenv로 설치한 2.7.8 버젼의 ruby는 전혀 인식하지 못하고, 예전에 rvm으로 설치한 2.7.6 버젼의 ruby를 여전히 인식하고 있는 것을 확인할 수 있다.
starship은 터미널 프롬프트를 입맛에 맞게 꾸밀 수 있도록 해주는 툴이다.
나의 경우는 프롬프트에 ip 주소, 브랜치 이름 등 다양한 정보를 표시할 수 있도록 했는데, 그 중 하나가 현재 사용 중인 ruby 버젼이다.
최근 읽고 있는 책들 중 하나인 효율적인 리눅스 명령어 사용의 기술이라는 책에서 리눅스의 검색 경로search path에 대해 설명하는 부분이 있다.
리눅스에서는 프로그램를 실행할 때, 해당 프로그램이 어디에 위치해 있는지를 알기 위해 검색 경로를 참조한다.
검색 경로는 콜론(:)으로 구분된 여러 디렉토리들의 집합이며, 이를 통해 프로그램이 어디에 위치해 있는지를 알 수 있다.
프로그램을 검색할 때는 검색 경로 앞에서부터 순차적으로 탐색하며, 만약 동일한 프로그램이 검색 경로에서 2개 이상 존재하더라도 가장 먼저 발견한 프로그램만을 실행하기 때문에, 이 경우 후순위에 위치한 프로그램은 실행되지 않는다!
다음과 같이 echo $PATH 명령어를 통해 현재 사용자의 검색 경로를 확인할 수 있다.
> echo $PATH | tr : "\n" # 콜론을 개행문자로 치환하여 보기 편하게 출력
/Users/greenhead/.rvm/gems/ruby-2.7.6/bin
/Users/greenhead/.rvm/gems/ruby-2.7.6@global/bin
/Users/greenhead/.rvm/rubies/ruby-2.7.6/bin
/Users/greenhead/.rbenv/shims
/opt/homebrew/opt/ccache/libexec
/Users/greenhead/.deno/bin
/Users/greenhead/.bun/bin
/opt/local/bin
/opt/local/sbin
/opt/homebrew/bin
/opt/homebrew/sbin
...여기서, rbenv로 설치한 ruby의 경로인 /Users/greenhead/.rbenv/shims가 검색 경로에 존재하는 것은 맞지만, rvm으로 설치한 ruby의 경로가 이보다 앞서기 때문에 rvm으로 설치한 ruby만 인식할 수 있었던 것이다.
그렇다면 rvm 설치 경로를 검색경로에 추가하는 스크립트를 제거해야 한다. 경험상 해당 프로그램을 검색 경로에 추가하는 스크립트는 셸 초기화파일인 $HOME/.zshrc에 작성되어 있는 경우가 많았다. (만약 bash 셸을 사용하고 있다면 $HOME/.bashrc)
source "$HOME/.rvm/scripts/rvm"실제로 $HOME/.zshrc 파일을 확인해보니, 위와 같은 스크립트가 존재하였다. 해당 스크립트를 제거한 뒤, 변경된 내용을 적용하기 위해 다음과 같이 source 명령어를 입력한다.
> source $HOME/.zshrc # 혹은, 터미널을 재시작하여 변경된 내용을 적용할 수도 있음우선 echo $PATH 명령어를 사용해서 다시 검색 경로를 확인해보자.
> echo $PATH | tr : "\n"
/Users/greenhead/.rbenv/shims # 오직 rbenv의 경로만이 검색 경로에 존재함
/opt/homebrew/opt/ccache/libexec
/Users/greenhead/.deno/bin
/Users/greenhead/.bun/bin
/opt/local/bin
/opt/local/sbin
/opt/homebrew/bin
/opt/homebrew/sbin
...아까와는 달리, rvm 관련 경로가 검색 경로에 미포함된 것을 확인할 수 있다.
따라서 위 사진과 같이, 정상적으로 rbenv로 설치한 ruby 버젼이 인식되는 것을 확인할 수 있다. 👍