web-dev-qa-db-fra.com

Installer Ruby 2.0 sans le commutateur Ruby?

Je trouve assez frustrant d'installer Ruby 2.0 sur le dernier Ubuntu 14.04. Je sais que je peux renoncer aux paquets et installer à partir des sources - mais je préférerais de loin installer un paquet - si cela est possible.

J'ai trouvé cette question/réponse à propos de Ruby le 13.10 - qui ressemblait à ce que je voulais.

Comment installer ruby?

Malheureusement, la stratégie ne semble pas viable - le paquet Ruby-switch a été supprimé en 14.04.

http://www.ubuntuupdates.org/package/core/trusty/universe/base/Ruby-switch

La suppression des références de paquetages n bogue qui, pour moi, n'a pas de rapport.

Je me demande bien pourquoi installer Ruby2.0 avec apt-get installe Ruby1.9 et en fait l'interprète par défaut Ruby. Je reçois un binaire Ruby2.0 - mais les scripts (qui dépendent d'un interpréteur 2.0 lors de l'exécution de Ruby) ne le prennent pas. De plus, quand j'utilise gem et. Al. installer Ruby packages - ceux-ci semblent être installés pour Ruby1.9 plutôt que 2.0. Très insatisfaisant.

Quelqu'un peut-il donner un indice sur le moyen le plus simple d'installer Ruby 2.0 en tant qu'interprète standard Ruby? Comment suis-je censé passer de Ruby 1.9 à 2.0 sans Ruby-switch?

23
aSteve

Pour 14.04, j'ai trouvé les AAE suivants qui viennent avec Ruby 2.x

  • Ajoute Ruby 2.1 à Ubuntu 14.04

    Sudo add-apt-repository ppa:brightbox/Ruby-ng
    

J'ai aussi trouvé dans GoRails un ensemble d'instructions pour installer Ruby le 14.04 mais je suppose que, vu qu'ils sont longs, vous voudriez plutôt un PPA.

  • Ajoute Ruby 1.9, 2.0 ou 2.1 à Ubuntu 14.04

    Sudo add-apt-repository ppa:brightbox/Ruby-ng-experimental
    

Après avoir ajouté l'un d'entre eux simplement:

Sudo apt-get update
Sudo apt-get install Ruby2.1 # In the case you want 2.1
29
Luis Alvarado
Sudo apt-get install Ruby2.0
Sudo rm /usr/bin/Ruby && Sudo ln -s /usr/bin/Ruby2.0 /usr/bin/Ruby
Sudo rm -fr /usr/bin/gem && Sudo ln -s /usr/bin/gem2.0 /usr/bin/gem
8
rjspotter

La version Debian de Ruby ne prend pas en charge plusieurs installations Ruby sur le même système. Debian rend le paquet obsolète et buntu vient de le supprimer des référentiels. Vous devez utiliser rbenv pour basculer entre les différentes versions de Ruby. Ceci est la méthode recommandée par la description du paquetage Ruby-switch et était la méthode qui a été décrite dans bug 737782 comme préféré, car il est dit qu'il ne devrait pas y avoir plus d'une version de Ruby dans les référentiels.

Ruby 2.0 est installé par défaut lors de l’installation du package Ruby2.0 et aucune autre action n’est nécessaire. Si le package Ruby a été installé, il est recommandé de le supprimer. Le binaire /usr/bin/Ruby2.0 devrait être disponible sur votre système.

8
Braiam

Si vous voulez passer d'un rubis à l'autre, je vous recommande d'utiliser rvm ( https://rvm.io ). C'est un gestionnaire de paquets qui vous permet d'installer de nombreux rubis différents (pas seulement ceux de Matz) sur une seule machine, que ce soit en local ou globalement pour tous les utilisateurs. .

Je sais que vous avez demandé un "forfait", alors peut-être que cela ne fonctionnera pas pour vous. Mais j’ai pensé que cela pourrait aider si c’est votre machine de développement.

L'avantage de procéder de cette façon est que vous pouvez installer un gemset pour 2.1.1 et d'autres pour 2.0 ou 1.9.3, etc. Il vous permet également de tester jruby, rubinius, etc. sans affecter votre système à un.

Je ne l'utilise pas en production, mais apparemment, cela convient aussi bien au développement.

Voici le quickstart: https://rvm.io/rvm/install

5
Louis

En fin de partie, mais je pense qu'une solution peut-être plus complète que les liens symboliques codés en dur est l'utilisation de update-alternatives, posté ici verbalement au cas où d'autres personnes seraient mordues par la même frustration et souhaiteraient une solution plus native. Cela gère tous les fichiers binaires et les pages de manuel, en supprimant d'abord les références de manière préemptive pour éviter les conflits.

Mises en garde:

  • Je pense que cela devra être réexécuté si/lorsque l’une des versions Ruby est mise à jour.
  • Je ne suis pas un gourou avec update-alternatives, il est donc possible que ce soit excessif et/ou effectué à tort.

Script (j'ai nommé fix-Ruby-alternatives.sh):

#!/bin/bash

# Script to insert all potentially alternative-able files within Ruby versioned packages
# Bill Evans ("r2evans")
# April 19, 2015

BIN=/usr/bin
MAN=/usr/share/man/man1
MASTER="Ruby"
SLAVES=( gem irb rdoc testrb rake erb ri )
VERSIONS=( 1.9.1 2.0 )

DRYRUN="yes"
[[ "$1" = "-y" ]] && unset DRYRUN

PRI=0
for ver in ${VERSIONS[@]} ; do
    PRI=$(( ${PRI} + 1 ))
    REMCMD="update-alternatives --remove ${MASTER} ${BIN}/${MASTER}${ver}"
    CMD="update-alternatives --install ${BIN}/${MASTER} ${MASTER} ${BIN}/${MASTER}${ver} ${PRI}"
    if test -f "${MAN}/${MASTER}${ver}.1.gz" ; then
        CMD="${CMD}    --slave ${MAN}/${MASTER}.1.gz ${MASTER}.1.gz ${MAN}/${MASTER}${ver}.1.gz"
    else
        echo "#  no ${MAN}/${MASTER}${ver}.1.gz" > /dev/stderr
    fi
    for sl in ${SLAVES[@]} ; do
        if test -f "${BIN}/${sl}${ver}" ; then
            CMD="${CMD}    --slave ${BIN}/${sl} ${sl} ${BIN}/${sl}${ver}"
        else
            CMD="${CMD}    --slave ${BIN}/${sl} ${sl} /dev/null"
            echo "#  no ${BIN}/${sl}${ver}" > /dev/stderr
        fi
        if test -f "${MAN}/${sl}${ver}.1.gz" ; then
            CMD="${CMD}    --slave ${MAN}/${sl}.1.gz ${sl}.1.gz ${MAN}/${sl}${ver}.1.gz"
        else
            CMD="${CMD}    --slave ${MAN}/${sl}.1.gz ${sl}.1.gz /dev/null"
            echo "#  no ${MAN}/${sl}${ver}.1.gz" > /dev/stderr
        fi
    done

    if [[ -n ${DRYRUN} ]]; then
        echo -e ${REMCMD}
        echo -e ${CMD} | sed -e 's/\s* --slave/\n    --slave/g'
        echo "# Consider: update-alternatives --auto Ruby"
    else
        ${REMCMD}
        ${CMD}
        echo "# Consider: update-alternatives --auto Ruby"
    fi
done
1
r2evans