Auf meiner Ubuntu-Entwicklermaschine (Ubuntu 8.10) verwende ich eine ruby-Enterprise-Version, die sich in /opt/ruby-enterprise niedergelassen hat und ihr eigenes gem mitbringt.
Will ich von meinem Useraccount aus gems installieren, z.B.:
$ sudo gem install rspec
dann klappt das auch, aber wie Wunder wird die Aktualisierung mit einem
$ gem list --local
nicht angezeigt. Nähere Untersuchung bringt dies zu Tage:
$ which gem
/opt/ruby-enterprise/bin/gem
$ sudo which gem
/usr/local/bin/gem
Aha! Der Grund ist, dass Ubuntu die Umgebung ($ env) des Users kraft dieser Zeile in der Datei /etc/sudoers:
Defaults env_reset
einfach tilgt: das debian-gem wird aufgerufen und das hat seine eigene gem-Verwaltung. Folgender Zusatz bewirkt Besserung (eingefügt mit sudo visudo):
Defaults env_keep = "COLORS DISPLAY SHELL TERM PATH JRUBY_HOME EDITOR
LANG HISTCONTROL RUBYOPT OUTPUT_CHARSET LC_ALL JAVA_HOME RAILS_ENV"
die /etc/environment
Zusätzlich kann man in der Datei /etc/environment noch den REE-Pfad einfügen, so dass die Allgemeinheit auch etwas davon hat:
PATH="/opt/ruby-enterprise/bin:/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin"
die /etc/apache2/envvars und /etc/crontab
Wo ich grade dabei bin: betreibt man einen Apache mit Passenger und ruby-Enterprise, dann kann es sinnvoll sein, den rechten Pfad auch in die Umgebungsvariablen des Apache zu stecken, falls man beim Aufruf von Skripten aus dem Webserver heraus sicherstellen möchte, dass die richtige ruby-Version verwendet wird.
Dies tut man in der /etc/apache2/envvars. Ein zusätzliches
export PATH="/opt/ruby-enterprise/bin:/usr/local/sbin:/usr/local/bin:
/usr/sbin:/usr/bin:/sbin:/bin"
an der Stelle reicht hin. Eine weitere Stelle wo’s gelegentlich fehlt ist die /etc/crontab. Auch hier ein:
PATH=/opt/ruby-enterprise/bin:...
Alternativen
Wo wir schon soviel geändert haben, lohnt sich vielleicht ein Blick auf das Kommando update-alternatives. Es soll durch geschickte Symlinks mehrere alternative Versionen ähnlicher Programme verwaltbar machen. Mit einem
sudo update-alternatives --install /usr/bin/ruby ruby /opt/ruby-enterprise/bin/ruby 100
habe ich folgendes hinbekommen (ohne vorherige Pfadvererbung):
~ > ruby --version
ruby 1.8.6 (2008-08-08 patchlevel 286) [i686-linux]
~ > sudo ruby --version
ruby 1.8.6 (2008-08-08 patchlevel 286) [i686-linux]
~ > /usr/bin/ruby1.8 --version
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
Die letzte ist die Ubuntu-eigene. Das klappt also – beim gem-Kommando war ich bis jetzt allerdings nicht erfolgreich. Nähere Informationen dazu finden sich in den
Weblinks
- multiple-versions-of-ruby-on-ubuntu-2
- multiple-versions-of-ruby-on-ubuntu-3