'sudo gem install' oder 'gem install' und gem-Positionen

140

Laufen ' sudo gem list --local' und ' gem list --local' geben mir unterschiedliche Ergebnisse. Mein Edelsteinpfad ist auf meinen Home-Ordner festgelegt und enthält nur die Edelsteine ​​von ' gem list --local'.

Es ist wahrscheinlich nicht gut, Gems in verschiedenen Verzeichnissen auf meinem Computer installiert zu haben. Sollte ich also den Gem-Pfad anders einstellen und sollte ich ihn immer verwenden, sudowenn ich etwas installiere?

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 ist leer.

raphael_turtle
quelle
1
Ich denke, dies ist eine gültige Frage für diejenigen von uns, die einen Edelstein verwenden müssen, für den Root-Rechte erforderlich sind.
Kelly
Siehe auch : stackoverflow.com/questions/21141584/… . Ich verwende rbenv zum Verwalten von Ruby-Versionen und bin auf ein Problem gestoßen, weil ich sudo gem install railsstattdessen verwendet habe gem install rails.
Dennis
3
"Ich denke, dies ist eine berechtigte Frage für diejenigen von uns, die einen Edelstein verwenden müssen, für den Root-Rechte erforderlich sind." Ich denke, jedes Juwel, das Root-Rechte benötigt, um installiert oder ausgeführt zu werden, ist höchst verdächtig. Edelsteine ​​sollten in der Lage sein, in einer Sandbox und mit den Berechtigungen des Benutzers ausgeführt zu werden.
der Blechmann
1
sudoist eine geladene Waffe, die auf Ihren Fuß gerichtet ist. Wenn Sie es verwenden, ohne zu verstehen, was es tut und wie es sich auf Ihr System auswirken kann, drücken Sie den Auslöser mit geschlossenen Augen. Sie könnten ein Loch in Ihren Fuß schießen, Sie könnten es nicht, aber so oder so möchten Sie das Risiko nicht eingehen, es sei denn, Sie wissen, wie Sie den Schaden rückgängig machen können. Verwenden von sudoSchreibvorgängen in den systemeigenen Ruby, der unter Mac OS von Apple für den eigenen Gebrauch installiert wurde. Wir können darauf zurückgreifen, aber wenn wir das Falsche ändern, kann dies den Code beschädigen. Aus diesem Grund installieren wir von der Quelle oder verwenden etwas anderes, um es zu installieren, wo wir es sicher optimieren können.
der Blechmann

Antworten:

146

Im Gegensatz zu allen anderen Posts empfehle ich, NICHT sudobei der Installation von Edelsteinen zu verwenden.

Stattdessen empfehle ich Ihnen, RVM zu installieren und ein glückliches Leben mit tragbaren Edelsteinhäusern und verschiedenen Ruby-Versionen zu beginnen, die alle unter einem Dach leben.

Für die Uneingeweihten aus der Dokumentation :

RVM ist ein Befehlszeilenprogramm, mit dem wir auf einfache Weise mehrere Ruby-Umgebungen und Edelsteinsätze installieren, verwalten und damit arbeiten können.

Der Grund, warum die Installation von Edelsteinen mit sudoschlechter ist als nur, gem installist, dass die Edelsteine ​​für ALLE BENUTZER als installiert werden root. Dies kann in Ordnung sein, wenn Sie die einzige Person sind, die die Maschine verwendet, aber wenn Sie dies nicht tun, kann dies zu Verrücktheit führen.

Wenn Sie sich entscheiden, alle Ihre Edelsteine ​​wegzublasen und erneut zu beginnen, ist es viel einfacher und sicherer, dies als Nicht-Root-Benutzer zu tun.

Wenn Sie sich entscheiden , die Sie verwenden möchten , RVMdann verwenden sudoalle Arten von Seltsamkeit verursachen , weil jede Sie Ruby - Version installieren , durch RVMseine eigene GEM_HOME hat.

Es ist auch schön, wenn Sie Ihre Entwicklungsumgebung so nah wie möglich an Ihre Produktionsumgebung bringen können und Sie in der Produktion höchstwahrscheinlich Edelsteine ​​als Nicht-Root-Benutzer installieren.

jonnii
quelle
12
+1 für das rvm vorschlagen, aber -1 für die verwirrende Verurteilung der alternativen Möglichkeit, nur sudo
tfwright
10
Ok, aber alle Ihre Gründe beschränken sich auf "weil RVM so großartig ist", nicht weil die Verwendung von Sudo besonders schädlich ist. Das einzige Mal, dass Sie nicht möchten, ist in der spezifischen Situation, dass Sie sich auf einem gemeinsam genutzten Computer befinden. Wenn Sie rvm empfehlen möchten, tun Sie das einfach. Sie müssen nicht auf FUDD zurückgreifen.
Tfwright
6
Ich versuche, FUD nicht zu verbreiten, und ich habe versucht, Nicht-RVM-Gründe anzugeben. Ich entschuldige mich, wenn es so scheint.
Jonnii
9
RVM ist eine gute Option. Aber du solltest es mit einem besseren versuchen, RBENV. Es ist weniger aufdringlich als RVM.
Andres
4
@ HontváriJózsefLevente Es ist schwierig, alle Ihre Fragen in einem Kommentar zu beantworten. Kurz gesagt, Sie möchten, dass Ihre Entwicklungsumgebung so nah wie möglich an der Produktion ist. Wenn Sie an zwei Apps arbeiten, von denen eine Ruby 2.1 und die andere Benutzer 1.9 verwendet, müssen Sie sicherstellen, dass Ihre lokale Umgebung die richtige Version verwendet. Das ist es, was RVM oder RBENV für Sie tun. Sie würden es aus dem gleichen Grund verwenden, aus dem Sie eine Sandbox-Umgebung verwenden würden, aber der Hauptvorteil in diesem Fall ist die Isolation. Ich hoffe das hilft!
Jonnii
128

Sie können Edelsteine ​​auch in Ihrer lokalen Umgebung (ohne sudo) mit installieren

gem install --user-install <gemname>

Ich empfehle dies, damit Sie nicht mit Ihrer Konfiguration auf Systemebene herumspielen, selbst wenn es sich um einen Einzelbenutzercomputer handelt.

Sie können überprüfen, wohin die Edelsteine ​​gehen, indem Sie sich die Edelsteinpfade mit ansehen gem environment. In meinem Fall ist es "~ / .gem / ruby ​​/ 1.8".

Wenn Sie einige Binärdateien aus lokalen Installationen benötigen, die Ihrem Pfad hinzugefügt wurden, können Sie Ihrem bashrc Folgendes hinzufügen:

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

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

Nils
quelle
23
+1 für diese Option anstelle der oben genannten "Noch ein weiteres Konfigurationstool" -Lösung, RBENV / RVM.
11.
Ich erstelle ein Juwel und gemäß den Handbüchern, die ich machen rake installund um die Sudo-Isse zu reparieren, musste ich das /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3/lib/bundler/gem_helper.rbHinzufügen --user-installdort manuell patchen . Ich kann keine bessere Lösung finden, da anscheinend rake installkeine zusätzlichen Parameter akzeptiert werden.
Nakilon
Ich bin absolut begeistert von diesem ersten Befehl. Ich habe versucht, Edelsteine ​​zu installieren und hatte Probleme, weil ich keine Sudo-Berechtigungen habe. Dieser Befehl hat funktioniert !!!!
Caleb Kleveter
34

Besser noch, --user-installfügen Sie Ihre ~ / .gemrc-Datei ein, damit Sie sie nicht jedes Mal eingeben müssen

gem: --user-install
Allyraza
quelle
13

Falls Sie

  • Rubinsteine ​​mit Sudo installiert
  • möchte Edelsteine ​​ohne Sudo installieren
  • Ich möchte rvm / rbenv nicht installieren

Fügen Sie Folgendes hinzu .bash_profile:

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

Öffnen Sie eine neue Registerkarte in Terminal OR source ~/.bash_profileund los geht's!

David Salamon
quelle
8
Für jemanden, der nicht mit Ruby, Rails, Rake und allem anderen arbeitet, was Ruby Devs verwenden / verwenden möchten, ist DIESE Lösung viel einfacher als die Verwendung von rvm. Es ist mir wirklich egal, ob ich verschiedene Ruby-Versionen habe. Ich möchte nur einige Shell-Programme ausführen, die als Edelsteine ​​verteilt sind. Danke dir!
Kevin Gimbel
9

Verwandte (für Bundler-Benutzer), wenn Sie eine leichtere Alternative zu RVM suchen, die alles in ein benutzerspezifisches, bekanntes Verzeichnis legt, empfehle ich die Verwendung von:

bundle install --path $HOME/.gem

Wenn Sie Edelsteine ​​an derselben Stelle installieren möchten

gem install --user-install GEMNAME

wird sie .gem/ruby/RUBYVERSIONin Ihrem Homedir installieren . (Siehe den anderen Kommentar zu dieser Frage über --user-install.)

Dadurch werden die Edelsteine ​​für usw. sichtbar gem list, deinstallierbar über gem uninstallusw., ohne dass ein sudoZugriff erforderlich ist . Von Gem oder Bundler installierte ausführbare Skripte können durch Hinzufügen in Ihren Pfad eingefügt werden

$HOME/.gem/ruby/RUBYVERSION/bin

zu deinem $PATH. gemselbst sagt Ihnen dies, wenn es nicht eingestellt ist, wenn Sie dies tun gem install --user-install.

Todd Vierling
quelle
Danke dafür. Ist es möglich, Bundler dazu zu bringen, dies standardmäßig zu tun? (Und wenn ja, wäre es eine gute Idee?)
Joshtch
6
sudo gem install --no-user-install <gem-name>

installiert Ihr Juwel global , dh es steht allen Benutzerkontexten zur Verfügung.

Tasos Koutoumanos
quelle
1
Es kann auch ein vom Hersteller installiertes Juwel überschreiben, von dem das Betriebssystem möglicherweise erwartet, dass es auf eine bestimmte Version eingestellt ist. Und das könnte Code brechen, der darauf beruht.
der Blechmann
1
... oder es könnte ein Juwel installieren, das ein Anbieter nicht bereitstellt, und zwar so, dass es allen Benutzern eines Systems zur Verfügung steht. Es ist leicht erschwerenden , dass alle Antworten überall den Leser davon ausgehen , ist ein Entwickler v / sa Sysadmin , die tatsächlich tut wollen eine bestimmte Version eines Juwel für alle Benutzer verfügbar zu machen. : D
dannysauer
1

Sie können Gems in einem bestimmten Ordner (Beispiel Vendor /) in Ihrer Rails-App installieren, indem Sie:

bundle install --path vendor
Chadi
quelle
Dies. Heutzutage ist Ihr Paketmanager das einzige Programm, das sudo zur Installation von Software benötigen sollte.
tjbp