2013-05-04 3 views
28

레일 앱을 설치하려고하는데 bundle을 사용할 때마다 sudo없이 실패합니다. 현재 상황은 레일을 포함하여 인 에 대해 sudo을 사용하는 한 모든 것이 작동한다는 것입니다. 나는 이것이 정확하다고 생각하지 않는다.번들러는 sudo 없이는 보석을 설치할 수 없습니다.

예를 들어

:

$ bundle update 
Updating git://github.com/refinery/refinerycms.git 
Fetching gem metadata from https://rubygems.org/....... 
Fetching gem metadata from https://rubygems.org/.. 
Resolving dependencies... 
Enter your password to install the bundled RubyGems to your system: 
Using rake (10.0.4) 
Using i18n (0.6.1) 
Using multi_json (1.7.2) 
Using rack-cache (1.2) 
Using rack-test (0.6.2) 
Installing hike (1.2.2) 
Errno::EACCES: Permission denied - /usr/local/rvm/gems/ruby-1.9.3-p194/build_info/hike-1.2.2.info 
An error occurred while installing hike (1.2.2), and Bundler cannot continue. 
Make sure that `gem install hike -v '1.2.2'` succeeds before bundling. 

을하지만 나는 그것이 말하는 일을하고 작동 :

$ gem install hike -v '1.2.2' 
Successfully installed hike-1.2.2 
Parsing documentation for hike-1.2.2 
Installing ri documentation for hike-1.2.2 
Done installing documentation for hike after 0 seconds 
1 gem installed 

이 패턴은 다른 보석에 대해 또 다시 반복합니다. 나는 그것을 얻지 않는다. 왜 이런 일이 일어나는 걸까요? sudo 번들을 사용하면이 오류없이 업데이트됩니다. 그러나 현재 상황은 rake... 또는 rails server 등 모든 것에 대해 sudo이 필요하다는 것입니다. 뭔가 잘못되었습니다.

추가 세부 사항 : 나는 ... OSX 10.8.3에있어

$ ruby -v 
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0] 
$ gem -v 
2.0.3 
$ rvm -v 
rvm 1.19.6 (stable) by Wayne E. Seguin <[email protected]>, Michal Papis <[email protected]> [https://rvm.io/] 

$ which ruby 
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/ruby 
$ which gem 
/usr/local/rvm/rubies/ruby-1.9.3-p194/bin/gem 
$ which rvm 
/usr/local/rvm/bin/rvm 

업데이트

내가 오류없이 sudo bundle install를 실행할 수있는 정보가 될 수 있습니다. 그런 다음 bundle install 직후에 위와 같이 오류가 발생합니다. 왜 이런거야?

갱신 2

/usr/local/rvm[master]$ ls -l 
total 56 
-rw-rw-r-- 1 root rvm 566 May 4 12:59 LICENCE 
-rw-rw-r-- 1 root rvm 8929 May 4 12:59 README 
-rw-rw-r-- 1 root rvm  7 May 4 12:59 RELEASE 
-rw-rw-r-- 1 root rvm  7 May 4 12:59 VERSION 
drwxrwsr-x 3 root rvm 102 May 4 01:34 archives 
drwxrwsr-x 35 root rvm 1190 May 4 12:59 bin 
drwxrwsr-x 11 root rvm 374 May 4 12:59 config 
drwxrwsr-x 6 root rvm 204 Jan 10 19:55 contrib 
drwxrwsr-x 5 root rvm 170 Jan 10 19:55 environments 
drwxrwsr-x 3 root rvm 102 Jan 10 19:55 examples 
drwxrwsr-x 5 root rvm 170 Jan 10 19:52 gems 
drwxrwxr-x 6 ESL rvm 204 May 4 12:59 gemsets 
drwxrwsr-x 92 root rvm 3128 May 4 01:34 help 
drwxrwsr-x 11 root rvm 374 May 4 01:34 hooks 
-rw-rw-r-- 1 root rvm 11 May 4 12:59 installed.at 
drwxrwsr-x 4 root rvm 136 Jan 10 19:54 lib 
drwxrwsr-x 5 root rvm 170 May 4 12:55 log 
drwxrwsr-x 2 root rvm 68 Jan 10 19:52 man 
drwxrwsr-x 9 root rvm 306 Jan 10 19:52 patches 
drwxrwxr-x 4 ESL rvm 136 May 4 12:59 patchsets 
drwxrwsr-x 4 root rvm 136 Jan 10 19:55 rubies 
drwxrwsr-x 64 root rvm 2176 May 4 01:34 scripts 
drwxrwsr-x 3 root rvm 102 May 4 01:34 src 
drwxrwsr-x 2 root rvm 68 Jan 10 19:52 tmp 
drwxrwsr-x 8 root rvm 272 May 4 12:59 user 
drwxrwsr-x 4 root rvm 136 Jan 10 19:52 usr 
drwxrwsr-x 5 root rvm 170 Jan 10 19:55 wrappers 

답변

8

이것은 당신이 루비를 설치하는 방식 때문이다.

솔직히 말해서 sudo를 신경 쓸 필요가 없다면 * 괜찮습니다. 하루가 끝나면 노트북이됩니다 ... 은행에서 실행중인 서버가 없습니다.

정말로 관심이 있으시면 필요에 따라 chown gem 폴더를 만드십시오.

+1

나는 rvm을 사용하여 Ruby를 설치했다고 생각했지만 총 n00b이므로 혼란 스러울 수 있습니다. 보석 폴더를 채우는 방법에 대해 자세히 설명해 주시겠습니까? 어디있어? – emersonthis

+4

'cd/path/to/gems'. 그리고 나서'sudo chown -R username : groupname *', 여기서 username과 groupname은 당신 자신의 것입니다 (내 시스템에서는 denis : 스태프 일 것입니다. 당신이 모른다면 터미널을 열고'ls -l'을 입력하십시오) . –

+0

질문에 따라, 보석은'/ usr/local/rvm/gems /'에 있습니다. –

16

RVM gem 디렉토리는 rvm 그룹이 소유해야합니다. 그래서, 대신 소유권을 변경, 단순히 rvm 그룹에 사용자를 추가하는 것이 현명 할 수 있습니다

# $(whoami) evaluates to your username 
# You may want to change this to a different username depending on your config 
# but $(whoami) is a passable default 
usermod -a -G rvm $(whoami) 
+0

이것은 정말 좋은 조언입니다. –

1

내가 같은 문제를 가지고 밖으로 발견 Bundler 프로그램이 모두 쓰기 권한이있는 경우 새로운 보석 검사를 설치하기 전에 $ GEM_HOME/build_info 파일을 찾았습니다. 내 경우에는 번들러를 실행하는 사용자가 'rvm'사용자 그룹에 있었지만 그 그룹이 모든 파일을 소유하고 있기 때문에 그룹은 그 중 일부를 쓸 수 없기 때문에 나의 경우에는 그렇지 않습니다.

umask 0022 (루트로 만든 모든 파일은 그룹으로 작성할 수 없음)의 umask 0002 대신 다른 사람이 갖고 있고 rvm이 기대하는 umask 0022가있는 루트 아래에 일부 보석을 설치했기 때문에 이러한 일이 일어났습니다.

2

오늘이 일이 발생했습니다. 이것은 고유 한 상황 일 수 있지만 RVM이 설치된 컴퓨터 (시스템 전체가 /usr/local/rvm)에서 RVM이 설치된 사용자 (~/.rvm)의 시스템에 Rails 소스 트리를 복사했습니다.

나는 bundle install을하고 "사용자 계정이 시스템 Rubygems에 설치할 수 없습니다."라는 시도를하고있었습니다. 오류.

~/.rvm/gems/ruby-2.1.1/cache -> /usr/local/rvm/gems/cache 

그 심볼릭 링크가 sudo없이 다시 작동 bundle install있어 제거 : 주변의 파고를 많이 후, 나는 내 ~/.rvm 디렉토리에 심볼릭 링크를 있었다 것으로 나타났습니다.

+0

오늘 Vagrant와 Cachier Plugin에서 동일한 문제가 발생 했으므로 해결책이 나에게 도움이되었습니다. 감사합니다. –

39
당신은 루트 권한을 필요로하지 않는, 사용자의 홈 폴더에 보석을 호스팅 할 수 있습니다

:

bundle install --path ~/.gem

이 매개 변수를 수동으로 export GEM_HOME=$HOME/.gem를 추가 전달을 방지하기 위해 당신의 .bash_profile -이 맥 OS에 sudo는 문제를 해결 및 기타 * nix 시스템. 당신은 또한 실행 파일 (예 들러 등)를 제공 보석에 액세스해야 할 수도 있습니다, 그래서 이것도 추가

PATH=$PATH:$HOME/.gem/bin 

또는 일부의 경우 :

PATH=$PATH:$HOME/.gem/ruby/<version>/bin 

심판 : https://stackoverflow.com/a/5862327/322020


UPD : 그러나이 환경 변수를 갖는 rbenv를 사용하기 시작하면 cau Ruby의 버전이 너무 다를 경우 문제가 발생하므로 rbenv-ed Ruby를 실행할 때마다 임시 unset GEM_HOME을 사용하거나 사용자 정의 사전을 추가 할 수 있습니다.

+0

이 작업은 debian 패키지에서 설치된 루비에서도 작동합니다. – amenthes

+1

이 경우 경로에'~/.gem/ruby ​​/ /bin'을 추가 할 수 있습니다. – amenthes

+0

감사합니다. 답변을 추가했습니다. – Nakilon

0

당신이 RVM을 사용하는 경우, 다음 두 단계를 수행하면

  1. 는 사용자가 RVM 그룹에 속해 있는지 확인 황금 수 있습니다

    sudo usermod -a -G rvm myUserName

  2. 확인 build_info 확인 RVM 그룹의 모든 사용자에게 쓸 수 있습니다.

    sudo chmod 664 $GEM_HOME/build_info/*

관련 문제