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
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.
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)
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.
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.
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.
Wenn Sie RVM verwenden, führen Sie diese beiden Schritte aus und Sie werden golden sein
Stellen Sie sicher, dass Ihr Benutzer zur RVM-Gruppe gehört
Sudo usermod -a -G rvm myUserName
Stellen Sie sicher, dass build_info für alle Benutzer in der RVM-Gruppe schreibbar ist
Sudo chmod 664 $GEM_HOME/build_info/*