'sudo gem install'또는 'gem install'및 gem 위치


140

' sudo gem list --local'와 ' gem list --local'를 실행 하면 다른 결과가 나타납니다. 보석 경로가 홈 폴더로 설정되어 있고 ' gem list --local' 의 보석 만 포함합니다 .

gem을 컴퓨터의 다른 디렉토리에 설치하는 것은 좋지 않을 수 있으므로 gem 경로를 다르게 설정해야하며 sudo무언가를 설치할 때 항상 사용해야 합니까?

my ~/.profile
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:$PATH"

~ / .bash_profile이 비어 있습니다.


1
루트 권한이 필요한 보석을 사용해야하는 사람들에게는 이것이 유효한 질문이라고 생각합니다.
켈리

관련 : stackoverflow.com/questions/21141584/... . Ruby 버전을 관리하기 위해 rbenv를 사용하고 sudo gem install rails대신에 문제가 발생했습니다 gem install rails.
데니스

3
"이것은 루트 권한이 필요한 보석을 사용해야하는 사람들에게는 유효한 질문이라고 생각합니다." 설치 또는 실행을 위해 루트 권한이 필요한 모든 보석은 매우 의심 스럽습니다. 보석은 샌드 박스에서 실행하고 사용자의 권한으로 실행할 수 있어야합니다.
Tin Man

1
sudo발을 향한 장전 된 총입니다. 작동 방식과 시스템에 미치는 영향을 이해하지 않고 사용하는 것은 눈을 감고 방아쇠를 당기는 것과 같습니다. 발에 구멍을 뚫을 수는 있지만 손상을 취소하는 방법을 모르면 위험을 감수하고 싶지 않은 방법입니다. sudoMac OS에서는 시스템 소유의 Ruby에 쓰기를 사용하여 Apple이 자체 용도로 설치했습니다. 피기 백 할 수 있지만 잘못된 것을 변경하면 코드가 손상 될 수 있습니다. 그렇기 때문에 소스에서 설치하거나 다른 것을 사용하여 안전하게 조정할 수있는 위치에 설치해야합니다.
Tin Man

답변:


146

다른 모든 게시물과 달리 sudogem을 설치할 때 사용하지 않는 것이 좋습니다 .

대신 RVM 을 설치 하고 휴대용 보석 집과 다른 버전의 루비를 모두 한 지붕 아래에서 사는 것이 좋습니다 .

시작하지 않은 경우 문서에서 :

RVM은 여러 루비 환경과 gem 세트를 쉽게 설치, 관리 및 사용할 수있는 명령 줄 도구입니다.

로 보석을 설치하는 이유는 sudo단지 것보다 더 나쁘다는 gem install그것의 보석 설치하기 때문에입니다 ALL의 USERS 등을 root. 기계를 사용하는 유일한 사람이라면 괜찮을지 모르지만 그렇지 않은 경우 기이함을 유발할 수 있습니다.

모든 보석을 날려 버리고 다시 시작하기로 결정했다면 루트가 아닌 사용자로하는 것이 훨씬 쉽고 안전합니다.

사용하기로 결정했다면 사용 하는 루비 버전마다 자체 GEM_HOME이 있기 때문에 RVM사용 sudo하면 모든 종류의 이상이 발생합니다 RVM.

또한 개발 환경을 가능한 한 프로덕션 환경에 가깝게 만들 수 있다면 프로덕션 환경에서 루트가 아닌 사용자로 gem을 설치할 가능성이 높습니다.


12
rvm은 +1을 제안하지만, sudo를 사용하는 다른 가능성에 대한 혼란스러운 비난에 대해서는 -1
tfwright

10
그러나 sudo를 사용하는 것이 특히 해 롭기 때문에 모든 이유가 "RVM이 너무 커서"로 요약됩니다. 원하지 않는 유일한 시간은 공유 컴퓨터에있는 특정 상황에서만 가능합니다. rvm을 권장하려면 그렇게하십시오. FUDD에 의지 할 필요가 없습니다.
tfwright

6
나는 FUD를 퍼 뜨리지 않고 비 VMVM 이유를 제시하려고 노력했지만, 그렇게 생각되면 사과합니다.
jonnii

9
RVM은 좋은 옵션입니다. 그러나 당신은 더 나은 것을 시도해야합니다, RBENV. RVM보다 방해가 적습니다.
Andres

4
@ HontváriJózsefLevente 의견으로 모든 질문을 처리하기는 어렵지만 개발 환경을 가능한 한 프로덕션에 가깝게 만들고 싶다는 단점이 있습니다. 두 개의 앱을 작업하는 경우 하나는 루비 2.1을 사용하고 다른 하나는 1.9를 사용하는 경우 로컬 환경에서 올바른 버전을 사용하고 있는지 확인해야합니다. 이것이 바로 RVM 또는 RBENV가하는 일입니다. 샌드 박스 환경을 사용하는 것과 같은 이유로 사용하지만이 경우 주요 이점은 격리입니다. 이게 도움이 되길 바란다!
jonnii

128

또한 해당 지역의 환경 (없는에서 보석을 설치할 수 있습니다 sudo)와

gem install --user-install <gemname>

단일 사용자 컴퓨터 인 경우에도 시스템 수준 구성을 혼동하지 않는 것이 좋습니다.

로 gempath를 보면 보석이 어디로 가는지 확인할 수 있습니다 gem environment. 제 경우에는 "~ / .gem / ruby ​​/ 1.8"입니다.

경로에 추가 된 로컬 설치의 바이너리가 필요한 경우 다음과 같이 bashrc에 무언가를 추가 할 수 있습니다.

if which ruby >/dev/null && which gem >/dev/null; then
    PATH="$(ruby -r rubygems -e 'puts Gem.user_dir')/bin:$PATH"
fi

( http://guides.rubygems.org/faqs/#user-install에서 )


23
위의 "Yet Another Configuration Tool"솔루션 인 RBENV / RVM 대신이 옵션을 +1하십시오.
jjpe

나는 보석을 만들고 있으며 매뉴얼에 따르면 rake installsudo isse를 수정하려면 거기 에 /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rb추가하여 수동으로 패치해야 --user-install했습니다. rake install추가 매개 변수를 허용하지 않는 것처럼 보이기 때문에 더 나은 솔루션을 찾을 수 없습니다 .
Nakilon

나는 첫 번째 명령에 전적으로 기뻐합니다. gem을 설치하려고했지만 sudo 권한이 없기 때문에 문제가 발생했습니다. 그 명령은 효과가 있었다! !!!
Caleb Kleveter

34

더 좋은 --user-install방법은 ~ / .gemrc 파일을 넣어 매번 입력 할 필요가 없다는 것입니다.

gem: --user-install

13

당신이 경우에

  • sudo로 설치된 루비 보석
  • sudo없이 gem을 설치하고 싶다
  • rvm / rbenv를 설치하고 싶지 않습니다

에 다음을 추가하십시오 .bash_profile.

export GEM_HOME=/Users/your_user›/.gem
export PATH="$GEM_HOME/bin:$PATH"

터미널 OR에서 새 탭을 열면 source ~/.bash_profile좋습니다.


8
Ruby, Rails, Rake 등을 사용하지 않는 누군가에게 Ruby Devs가이 솔루션을 사용하거나 사용하려는 모든 것이 rvm을 사용하는 것보다 훨씬 쉽습니다. 나는 다른 루비 버전에 관심이 없으며 보석으로 배포 된 일부 쉘 프로그램을 실행하고 싶습니다. 감사합니다!
Kevin Gimbel

9

관련 (번들 사용자의 경우) RVM에 대한 더 가벼운 대안을 원한다면 모든 것을 사용자 고유의 잘 알려진 디렉토리에 넣을 것입니다.

bundle install --path $HOME/.gem

같은 장소에 보석을 설치하려면

gem install --user-install GEMNAME

.gem/ruby/RUBYVERSIONhomedir에 설치합니다 . 에 대한이 질문에 대한 다른 의견을 참조하십시오 --user-install.

이렇게하면 액세스 할 필요없이을 gem list통해 보석을 볼 수 있고 제거 gem uninstallsudo수 있습니다. gem 또는 bundler에 의해 설치된 실행 가능한 스크립트는 다음을 추가하여 경로에 넣을 수 있습니다

$HOME/.gem/ruby/RUBYVERSION/bin

당신에게 $PATH. gem할 때 설정되지 않은 경우 자체에서 알려줍니다 gem install --user-install.


고마워 번 들러가 기본적 으로이 작업을 수행 할 수 있습니까? (그렇다면 좋은 생각일까요?)
joshtch

6
sudo gem install --no-user-install <gem-name>

gem을 전역 적으로 설치합니다 . 즉, 모든 사용자의 컨텍스트에서 사용할 수 있습니다.


1
또한 공급 업체가 설치 한 gem을 덮어 쓸 수 있으며 해당 OS는 특정 버전으로 설정 될 수 있습니다. 그리고 그것은 그것에 의존하는 코드를 깨뜨릴 수 있습니다.
Tin Man

1
... 또는 공급 업체가 제공하지 않는 gem을 설치하여 시스템의 모든 사용자가 사용할 수있는 방식으로 설치할 수 있습니다. 그것은 온화하게 모든 해답이 사방에 독자를 가정하는 것이 악화 것은 실제로 dev에 V / SA 시스템 관리자입니다 않습니다 희망이있는 모든 사용자가 사용할 수있는 보석의 특정 버전을 확인합니다. : D
dannysauer

1

다음을 사용하여 Rails 앱의 특정 폴더 (예 : vendor /)에 gem을 설치할 수 있습니다.

bundle install --path vendor

이. 요즘 소프트웨어를 설치하기 위해 sudo가 필요한 유일한 프로그램은 패키지 관리자입니다.
tjbp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.