2010-01-22 11 views
109

Laufen 'sudo gem list --local' und 'gem list --local' geben mir unterschiedliche Ergebnisse. Mein Schmuckpfad ist auf meinen Home-Ordner eingestellt und enthält nur die Edelsteine ​​von 'gem list --local'.'sudo gem install' oder 'gem install' und gem standorte

Es ist wahrscheinlich nicht gut, Edelsteine ​​in verschiedenen Verzeichnissen auf meinem Computer installiert zu haben, also sollte ich den Edelsteinpfad anders einstellen, und sollte ich immer sudo verwenden, wenn 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.

+0

Ich denke, das ist eine gültige Frage für diejenigen von uns, die ein Juwel verwenden müssen, das Root-Privilegien benötigt. – Kelly

+0

Related: http://stackoverflow.com/questions/21141584/rails-is-not-using-my-global-ruby-version. Ich benutze rbenv für die Verwaltung von Ruby-Versionen und stieß auf ein Problem, weil ich 'sudo gem install rails' anstelle von' gem install rails' verwendet habe. – Dennis

+3

"Ich denke, das ist eine gültige Frage für diejenigen von uns, die ein Juwel verwenden müssen, das Root-Privilegien benötigt." Ich denke, jedes Juwel, das root-Privilegien benötigt, um entweder installiert zu werden oder zu laufen, ist höchst verdächtig.Edelsteine ​​sollten in der Lage sein, in einer Sandbox zu laufen und mit den Berechtigungen des Benutzers zu laufen. –

Antwort

129

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

Stattdessen empfehle ich Sie installieren RVM und starten Sie ein glückliches Leben mit tragbaren Gem Häuser und verschiedene Version von Ruby alle unter einem Dach leben.

Für die Uneingeweihten, von the documentation:

RVM ist ein Kommandozeilen-Tool, das wir einfach zu installieren, verwalten und arbeiten mit mehreren Rubinen Umgebungen und Gruppen von Edelsteinen ermöglicht.

Der Grund, warum Edelsteine ​​mit sudo Installation ist schlimmer als nur gem install ist, weil es die Edelsteine ​​für ALLE NUTZER als root installiert. Dies kann in Ordnung sein, wenn Sie die einzige Person sind, die das Gerät verwendet, aber wenn Sie nicht sind, kann es Verrücktheit verursachen.

Wenn Sie entscheiden, dass Sie alle Ihre Edelsteine ​​wegpusten und neu starten möchten, ist es viel einfacher und sicherer, dies als Nicht-root-Benutzer zu tun.

Wenn Sie sich entscheiden, RVM verwenden dann sudo verwenden, werden alle Arten von Seltsamkeit verursachen, weil jede Ruby-Version Sie installieren RVM durch 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 in der Produktion werden Sie höchstwahrscheinlich Edelsteine ​​als Nicht-Root-Benutzer installieren.

+11

+1 für die rvm vorschlagen, aber -1 für die verwirrende Verurteilung der alternativen Möglichkeit, nur Sudo – tfwright

+0

Es ist wirklich nicht so verwirrend. http://rvm.beginrescueend.com/gems/ – jonnii

+0

@floyd, aktualisiert den Beitrag mit mehr Gründen, sudo nicht zu verwenden. – jonnii

93

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

gem install --user-install <gemname> 

Ich empfehle Ihnen, so verwirren sie nicht mit dem System-Level-Konfiguration, selbst wenn es sich um eine Single-User-Computer ist.

Sie können überprüfen, wo die Edelsteine ​​gehen, indem Sie auf Gemempaths mit gem environment schauen. In meinem Fall ist es "~/.gem/ruby ​​/ 1.8".

Wenn Sie einige Programme von lokalen Installationen hinzugefügt, um Ihren Weg benötigen, können Sie etwas zu Ihrem bashrc wie hinzufügen:

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

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

+16

+1 für diese Option anstelle der oben genannten Lösungen "Noch ein weiteres Konfigurationstool", RBENV/RVM. – jjpe

+0

Ich erstelle ein Juwel und nach den Handbüchern muss ich 'rake install' machen und um das sudo issé zu reparieren, musste ich manuell die' /Library/Ruby/Gems/2.0.0/gems/bundler-1.7.3 patchen/lib/bundler/gem_helper.rb' fügt da '-user-install' hinzu. Kann keine bessere Lösung finden, weil "Rake Install" keine zusätzlichen Parameter akzeptiert. – Nakilon

+0

Ich bin absolut begeistert von diesem ersten Befehl. Ich habe versucht, Edelsteine ​​zu installieren und habe Probleme, weil ich keine Sudoprivilegien habe. Dieser Befehl hat funktioniert !!!! –

2

Sie Edelsteine ​​in einem bestimmten Ordner installieren können (Beispiel Verkäufer /) in Ihrem Rails-App:

bundle install --path vendor 
+0

Dies. Das einzige Programm, das sudo zur Installation von Software benötigt, ist heutzutage der Paketmanager. – tjbp

3
sudo gem install --no-user-install <gem-name> 

installiert Ihr Juwel global, d. H. Es wird für alle Benutzerkontexte verfügbar sein.

+0

Es kann auch ein vom Hersteller installiertes Juwel überschreiben, für das dieses Betriebssystem möglicherweise eine bestimmte Version erwartet. Und das könnte Code zerstören, der darauf beruht. –

7

Verwandte (für Bündler-Benutzer), wenn Sie eine leichtere Alternative zu RVM möchten, welche alles in einem benutzerspezifischen bekannten Verzeichnis abgelegt wird, empfehle ich mit:

bundle install --path $HOME/.gem 

, wenn Sie Edelsteine ​​installieren möchten der gleiche Ort, die

gem install --user-install GEMNAME 

sie installieren, .gem/ruby/RUBYVERSION in Ihrem Home-Verzeichnis. (Siehe anderen Kommentar zu dieser Frage zu --user-install.)

Dies wird der Edelstein sichtbar gem list, installierbar über gem uninstall machen usw. ohne sudo Zugang zu benötigen. Runnable Skripte von Edelstein oder Bündler installiert ist, kann durch Zugabe von

$HOME/.gem/ruby/RUBYVERSION/bin 

zu Ihrem $PATH in Ihren Weg gebracht werden. gem selbst sagt Ihnen darüber, wenn es nicht eingestellt ist, wenn Sie gem install --user-install tun.

26

noch besser, setzen --user-install in Ihrer ~/.gemrc Datei, so dass Sie es nicht jedes Mal eingeben müssen

gem: --user-install 
5

Falls Sie

  • installiert Rubin Edelsteine ​​mit sudo
  • wollen Edelsteine ​​ohne Sudo
  • installieren möchten nicht rvm/rbenv

fügen Sie folgendes zu Ihrem .bash_profile:

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

Öffnen Sie einen neuen Tab in Terminal oder source ~/.bash_profile und Sie sind gut zu gehen!

+2

Für jemanden, der nicht mit Ruby, Rails, Rake und anderen Ruby Devs arbeitet/diese verwenden möchte, ist diese Lösung viel einfacher als die Verwendung von rvm. Mir ist es wirklich egal, verschiedene Ruby-Versionen zu haben. Ich möchte nur einige Shell-Programme ausführen, die als Edelsteine ​​verteilt sind. Vielen Dank! –

Verwandte Themen