[ruby] 권한 오류와 함께 실패하면 gem을 설치하거나 RubyGem을 업데이트하는 방법

를 사용하여 gem install mygemRubyGems를 사용 하거나 업데이트 하여 gem을 설치하려고 하는데이 gem update --system오류로 실패합니다.

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

누구든지 이것을 해결하는 방법을 알고 있습니까?



답변

/Library/Ruby/Gems/1.8 디렉토리에 대한 쓰기 권한이 없습니다.

바로 거기에 글을 쓸 수있는 권한이 없음을 의미합니다.

Apple에서 자체적으로 설치 한 Ruby 버전입니다. 권한 문제에 대해 잘 모르기 때문에 수행중인 작업을 아는 경우 약간 수정 해도 괜찮습니다. 계속 진행하는 것은 좋지 않습니다.

대신 rbenv 또는 RVM 을 사용하여 홈 디렉토리의 샌드 박스에 설치된 별도의 Ruby를 관리하여 시스템 Ruby를 망칠 염려없이 수정 / 접기 / 스핀들 / 변경을 수행 할 것을 강력히 제안합니다 .

둘 사이에서 rbenv를 사용하지만 과거에는 RVM을 많이 사용했습니다. rbenv는 Ruby 설치를 관리하기 위해보다 “실제적인”접근 방식을 취합니다. RVM은 많은 기능을 가지고 있으며 매우 강력하지만 결과적으로 더 방해가됩니다. 두 경우 모두, 읽어 당신이 선택 중 설치를 시작하기 전에 그들을 위해 몇 시간을 설치 문서를.


답변

다음 --user-install을 사용 하는 대신 추가하십시오 sudo.

gem install mygem --user-install


답변

실제로 Ruby 버전 관리자를 사용해야합니다.

하나를 올바르게 사용하면 gem update명령을 실행할 때 권한 문제를 예방하고 해결할 수 있습니다 .

rbenv 권장 합니다 .

그러나 Ruby 버전 관리자를 사용하더라도 동일한 오류 메시지가 계속 표시 될 수 있습니다.

만약 당신이 rbenv를 사용하고 있다면, ~/.rbenv/shims디렉토리가 시스템 Ruby의 경로 앞에 있는지 확인하십시오 .

$ echo $PATH 로드 경로의 순서를 보여줍니다.

shims 디렉토리가 시스템 Ruby bin 디렉토리 다음에 오는 경우 ~/.bashrc파일 을 편집하여 이를 마지막 export PATH 명령으로 두십시오. export PATH=$HOME/.rbenv/shims:$PATH

$ ruby -v 사용중인 Ruby 버전을 보여줍니다

이것은 내가 현재 시스템 버전의 Ruby를 사용하고 있음을 보여줍니다 (보통 좋지 않습니다)

$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

$ rbenv global 1.9.3-p448 미리 설치된 최신 버전으로 전환합니다 (아래 참조 참조).

이것은 내가 최신 버전의 Ruby를 사용하고 있음을 보여줍니다 (Gem :: FilePermissionError를 일으키지 않을 것입니다)

$ ruby -v
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

일반적으로 sudo로 gem 명령을 시작하지 않아도됩니다. 그렇게해야한다고 생각되면 무언가 잘못 구성되었을 수 있습니다.

rbenv에 대한 자세한 내용은 다음을 참조하십시오.


답변

왜 안 해?

sudo gem update --system


답변

이렇게하면 MacOs MojaveMacOs Catalina 의 문제가 깔끔하게 해결됩니다 .

brew install ruby

그런 다음 GEM_HOME을 사용자 디렉토리로 설정하십시오. 터미널에서 :

Bash:

echo '# Install Ruby Gems to ~/gems' >> ~/.bashrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.bashrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

또는 켜져있는 경우 Zsh:

echo '# Install Ruby Gems to ~/gems' >> ~/.zshrc
echo 'export GEM_HOME=$HOME/gems' >> ~/.zshrc
echo 'export PATH=$HOME/gems/bin:$PATH' >> ~/.zshrc
source ~/.zshrc


답변

나에게 문제는 rbenv적절한 버전을 전체적으로 설정하고 잊어 버렸기 때문 입니다.

그래서 나는 그것을 설정해야했다. rbenv global xxx

내 경우에는 설치를 2.0.0-p247했으므로 다음 명령을 실행해야했습니다.

rbenv global 2.0.0-p247
rbenv rehash

그런 다음 모두 잘 작동했습니다.


답변

경로를 수정해야합니다.

이 수정 프로그램이 작동하는지 확인하려면 다음을 실행하십시오.

which gem

권한이없는 디렉토리를 출력해야합니다.

/usr/bin/gem

이 문제를 해결하려면 다음 단계를 수행하십시오.

  1. 프로파일에 복사해야 할 경로를 결정하십시오.

    rbenv init -

    출력의 첫 번째 라인은 프로파일에 복사해야하는 라인입니다.

    export PATH="/Users/justin/.rbenv/shims:${PATH}" #path that needs to be copied
    source "/usr/local/Cellar/rbenv/0.4.0/libexec/../completions/rbenv.zsh"
    rbenv rehash 2>/dev/null
    rbenv() {
      typeset command
      command="$1"
      if [ "$#" -gt 0 ]; then
        shift
      fi
    
      case "$command" in
      rehash|shell)
        eval `rbenv "sh-$command" "$@"`;;
      *)
        command rbenv "$command" "$@";;
      esac
    }
  2. 프로파일 경로를 복사하여 저장하십시오.

  3. 프로필을 다시로드하십시오 ( source ~/.zshenv나를 위해).

  4. 를 실행하십시오 rbenv rehash.

이제 실행할 때 which gem권한이있는 로컬 경로를 가져와야합니다.

/Users/justin/.rbenv/shims/gem