wake-up-neo.com

Bundler kann keine Juwelen ohne Sudo installieren

Ich versuche, eine Rails-App zu installieren, und jedes Mal, wenn ich bundle verwende, fällt diese ohne Sudo aus. Meine aktuelle Situation ist, dass alles funktioniert, solange Sudo für alles, einschließlich Rails, verwendet wird. Ich finde das nicht richtig.

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 benutze, wird das Update ohne diesen Fehler aktualisiert. Aber die aktuelle Situation ist, dass ich Sudo für alles brauche, einschließlich rake... oder Rails server usw. 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

Update

Es kann aussagekräftig sein, dass ich Sudo bundle install ohne Fehler ausführen kann. Unmittelbar danach schlägt bundle install mit einem Fehler wie oben beschrieben fehl. 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
32
emersonthis

Sie können Gems in Ihrem Benutzerordner hosten, für den keine Rootberechtigungen erforderlich sind:

bundle install --path ~/.gem

Um zu vermeiden, dass dieser Parameter manuell übergeben wird, fügen Sie export GEM_HOME=$HOME/.gem zu Ihrem .bash_profile hinzu. Dadurch wird das Sudo-Problem unter Mac OS und anderen * nix-Systemen gelöst. Möglicherweise müssen Sie auch Zugriff auf Edelsteine ​​haben, die ausführbare Dateien (z. B. Bundler) bereitstellen. Fügen Sie also Folgendes hinzu:

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: Denken Sie jedoch daran, dass bei Verwendung von rbenv mit dieser Umgebungsvariablen die gleichen Probleme auftreten können, wenn Sie zu unterschiedliche Ruby-Versionen verwenden. Daher möchten Sie möglicherweise unset GEM_HOME temporär voreinstellen oder bei jedem Start von rbenv-ed Ruby einen benutzerdefinierten vorangestellt.

47
Nakilon

Ihr RVM-gem-Verzeichnis sollte der Gruppe rvm gehören. Anstatt den Besitzer zu wechseln, kann es daher sinnvoll sein, den Benutzer einfach zur Gruppe rvm hinzuzufü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)
18
Matthew Clark

Dies liegt an der Art und Weise, wie Sie Ruby installiert haben.

Ehrlich gesagt, es funktioniert gut, wenn Sie den Sudo nicht stört. Am Ende des Tages ist es nur Ihr Laptop ... Nicht irgendein Server, der in einer Bank läuft.

Wenn es Ihnen wirklich wichtig ist, legen Sie die Edelsteinordner nach Bedarf fest.

8

Das war mir heute passiert. Dies könnte eine einzigartige Situation sein, aber ich hatte einen Rails-Quellbaum von einem System, auf dem RVM global installiert war (systemweit in /usr/local/rvm), auf ein System kopiert, auf dem gerade RVM pro Benutzer installiert war (~/.rvm).

Ich habe versucht, bundle install auszuführen und das "Ihr Benutzerkonto darf nicht auf dem System Rubygems installiert werden". Error. Nach langem Stöbern bemerkte ich, dass in meinem ~/.rvm-Verzeichnis ein symbolischer Link vorhanden war:

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

Durch das Entfernen des symbolischen Links wurde bundle install wieder ohne Sudo ausgeführt.

2
bjnord

Ich hatte das gleiche Problem und stellte fest, dass Bundler vor der Installation neuer Gems prüft, ob er Schreibrechte für alle gefundenen Dateien hat. $ GEM_HOME/build_info. In meinem Fall war dies nicht der Fall, da die Gruppe, in der der Run-Bundler ausgeführt wurde, sich in der Benutzergruppe 'rvm' befand und diese Gruppe alle diese Dateien besaß, einige dieser Dateien nicht schreiben durften.

Dies geschah, weil ich einige der Edelsteine ​​unter root installiert habe, die umask 0022 (alle von root erstellten Dateien können nicht von einer Gruppe geschrieben werden können) anstelle von umask 0002 installiert, die andere haben und die rvm erwartet.

1
snovity

Wenn Sie RVM verwenden, führen Sie diese beiden Schritte aus und Sie werden golden sein

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

    Sudo usermod -a -G rvm myUserName

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

    Sudo chmod 664 $GEM_HOME/build_info/*

0
Darren Hicks