2013-05-04 10 views
28

Ich versuche, eine Schiene App zu installieren, und jedes Mal, wenn ich bundle verwende, schlägt es ohne sudo fehl. Meine derzeitige Situation ist, dass alles so lange funktioniert, wie sudo für alles einschließlich Schienen verwenden. Ich denke nicht, dass das richtig ist.Bundler kann keine Edelsteine ​​ohne sudo installieren

Zum Beispiel:

$ 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. 

Aber dann mache ich, was es sagt und es funktioniert:

$ 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 

Dieses Muster wiederholt sich immer wieder für verschiedene Edelsteine. Ich verstehe es nicht. Warum passiert dies? Wenn ich sudo verwende, wird das Bundle ohne diesen Fehler aktualisiert. Aber die aktuelle Situation ist, dass ich sudo für alles brauche, einschließlich rake... oder rails server, etc. Etwas stimmt nicht.

Weitere Details: Ich bin auf 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 

aktualisieren

Es kann informativ sein, dass ich sudo bundle install ohne Fehler ausführen können. Dann schlägt sofort nach bundle install mit einem Fehler fehl, wie Sie oben sehen. Warum ist das?

Update2

/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 

Antwort

8

Dies ist auf die Art und Weise Sie ruby ​​installiert.

Ehrlich gesagt, es funktioniert * einfach in Ordnung *, wenn Sie das Sudo nicht stören. Am Ende des Tages ist es nur dein Laptop ... Nicht irgendein Server, der in einer Bank läuft.

Wenn Sie wirklich kümmern, Chown Gem Ordner nach Bedarf.

+1

Ich dachte, ich installiert Ruby mit rvm, aber ich bin insgesamt N00b, also kann ich verwirrt sein. Kannst du ein wenig darüber nachdenken, wie man die Edelsteinordner anordnet? Wo sind sie? – emersonthis

+4

'cd/pfad/zu/gems'. Und dann 'sudo chown -R Benutzername: Gruppenname *', wobei Benutzername und Gruppenname deine eigenen sind (auf meinem System wäre das denis: staff; wenn du deinen nicht kennst, öffne Terminal und tippe 'ls -l') . –

+0

Basierend auf deinen Fragen, sind deine Edelsteine ​​in '/ usr/local/rvm/gems /' –

16

Ihr RVM-Verzeichnis sollte der rvm-Gruppe gehören. Anstatt also das Eigentum an zu ändern, könnte es klug sein, einfach um den Benutzer zu der Gruppe rvm hinzufügen:

# $(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

Das ist ein wirklich guter Rat. –

1

Ich hatte das gleiche Problem und fand heraus, dass Bündler, bevor neue gems Kontrollen zu installieren, wenn sie die Genehmigung schreiben für alle Dateien gefunden $ GEM_HOME/build_info. In meinem Fall nicht, denn obwohl der Benutzer, der den Bundler ausgeführt hat, in der Benutzergruppe 'rvm' war und diese Gruppe alle diese Dateien besaß, durfte die Gruppe einige davon nicht schreiben.

Das ist passiert, weil ich einige der Edelsteine ​​unter root installiert habe, die Umask 0022 (alle Dateien von root erstellt, kann nicht von Gruppe geschrieben werden) anstelle von umask 0002, die andere haben und welche rvm erwartet.

2

Ich hatte das heute passieren. Dies könnte eine eindeutige Situation sein, aber ich hatte einen Quellbaum von Rails von einem System kopiert, auf dem RVM global installiert war (systemweit in /usr/local/rvm), zu einem System, auf dem pro Benutzer nur RVM installiert war (~/.rvm).

Ich habe versucht, bundle install zu tun und die "Ihr Benutzerkonto ist nicht erlaubt, in das System Rubygems zu installieren." Error.Nach viel um das Stoßens, bemerkte ich, dass in meinem ~/.rvm Verzeichnis eine symbolische Verbindung war:

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

Entfernen dass Symlink bekam bundle install wieder zu arbeiten, ohne sudo.

+0

Ich habe das gleiche Problem mit Vagrant und dem Cachier-Plugin heute erlebt, Ihre Lösung hat mir den Tag gerettet, danke! –

39

Sie Edelsteine ​​in Ihrem Benutzerordner zu Hause bewirten können, die nicht root-Rechte benötigt:

bundle install --path ~/.gem

Um dies zu vermeiden Parameter übergeben manuell hinzufügen export GEM_HOME=$HOME/.gem auf Ihr .bash_profile - dies löst sudo Problem unter Mac OS und andere * nix-Systeme. Sie dann könnten auch Zugang zu Edelsteine ​​haben, müssen die ausführbaren Dateien (wie Bündler) bieten, so dass diese auch hinzufügen:

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

oder in einigen Fällen:

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

ref: https://stackoverflow.com/a/5862327/322020

UPD: Aber denken Sie daran, wenn Sie anfangen, rbenv zu verwenden, der diese Umgebungsvariable hat, kann die gleiche cau sein Probleme können auftreten, wenn Sie zu unterschiedliche Versionen von Ruby verwenden, also sollten Sie entweder unset GEM_HOME temporär verwenden oder jedes Mal, wenn Sie Ruby rbenv-ed starten, eine eigene Version erstellen.

+0

Dies funktioniert mit einem Rubin, der ebenfalls von Debian-Paketen installiert wird. – amenthes

+1

möchten Sie in diesem Fall '~/.gem/ruby ​​/ /bin' zu Ihrem Pfad hinzufügen. – amenthes

+0

Danke, @amethes. Hinzugefügt, um zu antworten. – Nakilon

0

Wenn Sie RVM verwenden, dann tun diese beiden Schritte und Sie werden

  1. Stellen Sie sicher, dass Benutzer gehört zur RVM Gruppe

    sudo usermod -a -G rvm myUserName

  2. Stellen Sie sicher, build_info golden ist beschreibbar für alle Benutzer in der RVM-Gruppe

    sudo chmod 664 $GEM_HOME/build_info/*

Verwandte Themen