Gem file permission error 해결
Jekyll을 구동하기 위해 Ruby 설치중 마주친 문제에 대한 기록입니다.
Gem은 Ruby의 패키지 시스템(라이브러리 패키지)입니다.
처음 Ruby를 설치할 때 우선 Mac용 패키지 관리 도구인 Homebrew를 사용하였습니다
brew install ruby
Gem::FilePermissionError 발생과정
보통 Gem을 통해서 bundler를 설치하라는 가이드가 많아 아래의 커맨드를 이용해 bundler를 설치해 보겠습니다.
gem install bundler
위의 명령어 실행시 아래와 같은 에러를 마주치는 경우가 있습니다.
Fetching bundler-2.4.12.gem
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
해당 에러는 시스템 Ruby를 현재 사용중이기에 root 권한이 없어서 gem을 설치하지 못하였기 때문입니다. 보안상의 이유로 권장되지 않는 방법이지만 저는 그대로 시도해 보았습니다..
sudo gem install bundler
bundle install
결과는 수많은 PermissionError와 아래의 에러 문구입니다.
Bundler::PermissionError: There was an error while trying to write to
`/Library/Ruby/Gems/2.6.0/cache/rake-13.0.6.gem`. It is likely that you need to
grant write permissions for that path.
An error occurred while installing rake (13.0.6), and Bundler cannot
continue.
In Gemfile:
rake
rubygem이 제대로 업데이트가 안된것 같아 아래의 명령어로 gem을 업데이트 시켜 보았습니다.
gem update --system
하지만 똑같은 에러메세지를 확인 할 수 있었습니다.
Updating rubygems-update
Fetching rubygems-update-3.4.12.gem
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
root권한 문제인거 같아 sudo로 실행해 보았습니다
sudo gem update --system
이후 bundle 설치를 시도해 보았습니다
bundle install
하지만 결과는 Gem::GemNotFoundException 에러를 마주하였습니다.
/Library/Ruby/Site/2.6.0/rubygems.rb:263:in `find_spec_for_exe': **can't find gem bundler (>= 0.a) with executable bundle (****Gem::GemNotFoundException****)**
from /Library/Ruby/Site/2.6.0/rubygems.rb:282:in `activate_bin_path'
from /usr/bin/bundle:23:in `<main>'
에러 해결과정
rbenv 설치 및 Ruby 버전 변경
Ruby의 버전관리 매니저인 rbenv를 통해 에러를 해결 할 수 있었습니다.
homebrew를 사용하여 rbenv를 설치합니다
brew update
brew install rbenv ruby-build
현재 어떤 Ruby version들이 rbenv로 설치 되어있는지 확인해 보겠습니다
rbenv versions

현재 시스템에 설치 되어 있는 Ruby 버전과 시스템에 적용된 (*) Ruby 버전을 확인할 수 있습니다.
제 경우 system Ruby를 사용하고 있다는 것을 알 수 있습니다.
rbenv를 통해 설치 가능한 Ruby버전을 확인해 보겠습니다.
rbenv install -l

설치 가능한 Ruby버전 리스트가 나타납니다. 현재 (2023.05.07)기준 가장 최신 버전인 3.2.2버전을 받아보도록 하겠습니다.
rbenv install 3.2.2
설치된 Ruby버전들을 다시 확인해 보겠습니다
rbenv versions
새로 추가된 3.2.2버전이 나타납니다.

글로벌 버전을 3.2.2로 변경해주겠습니다.
rbenv global 3.2.2
설치된 Ruby 버전들을 다시 확인해보면 3.2.2로 변경되어 있음을 확인할 수 있습니다.

쉘 설정 내용 적용
이제 쉘 설정 파일에 rbenv PATH를 추가해 주겠습니다.
사용하는 쉘 타입에 따라서 아래 파일에 내용을 추가해 주겠습니다.
- zsh는
.zshrc - bash는
.bashrc
vim ~/.zshrc
[[ -d ~/.rbenv ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval "$(rbenv init -)"
해당 설정내용을 적용하기 위해 source명령어를 사용하겠습니다
source ~/.zshrc
새로 설치된 Ruby버전으로 다시 Bundler를 설치해 보겠습니다 (처음 오류가 발생했던 명령어..)
gem install bundler
정상 작동하는걸 확인할 수 있습니다
Fetching bundler-2.4.12.gem
Successfully installed bundler-2.4.12
Parsing documentation for bundler-2.4.12
Installing ri documentation for bundler-2.4.12
Done installing documentation for bundler after 3 seconds
1 gem installed
Bundler는 gem파일을 읽고 요청한 버전의 gem을 설치할 수 있습니다.
bundle install명령도 정상적으로 실행 되는걸 확인했습니다.
Jekyll server 를 컴퓨터에서 실행시키기
bundle exec jekyll serve