Installare ruby ​​2.0 senza ruby-switch?


23

Sto trovando il compito di installare ruby ​​2.0 sull'ultimo Ubuntu 14.04 piuttosto frustrante. Sono consapevole che potrei rinunciare ai pacchetti e installarli dal sorgente, ma preferirei di gran lunga installare un pacchetto, se possibile.

Ho trovato questa domanda / risposta sul rubino il 13.10 - che sembrava quello che volevo.

Come installare ruby?

Sfortunatamente, la strategia non sembra praticabile: il pacchetto ruby-switch è stato eliminato in 14.04.

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

La cancellazione del pacchetto fa riferimento a un bug che, per me, sembra del tutto estraneo.

Sono confuso sul perché installare ruby2.0 usando apt-get installa ruby1.9 e lo rende l'interprete ruby ​​predefinito. Ricevo un binario ruby2.0 - ma gli script (che dipendono da un interprete 2.0 durante l'esecuzione di ruby) non lo raccolgono. Inoltre, quando uso gem et. al. per installare i pacchetti ruby ​​- questi sembrano essere installati per ruby1.9 anziché 2.0. Molto insoddisfacente

Qualcuno può offrire un suggerimento sul modo più semplice per installare ruby ​​2.0 come interprete ruby ​​standard? Come posso passare da ruby ​​1.9 a 2.0 senza ruby-switch?

Risposte:


29

Per 14.04 ho trovato i seguenti PPA forniti con Ruby 2.x

  • Aggiunge Ruby 2.1 a Ubuntu 14.04

    sudo add-apt-repository ppa:brightbox/ruby-ng
    

Ho anche trovato su GoRails una serie di istruzioni per installare Ruby su 14.04, ma suppongo che, dato che sono lunghi, vorresti invece un PPA.

  • Aggiunge Ruby 1.9, 2.0 o 2.1 a Ubuntu 14.04

    sudo add-apt-repository ppa:brightbox/ruby-ng-experimental
    

Dopo averne aggiunto uno semplicemente:

sudo apt-get update
sudo apt-get install ruby2.1 # In the case you want 2.1

6
È davvero necessario aggiungere un 'Personal Package Archive' per installare Ruby 2.0 in Ubuntu 14.04 - dato che esiste un pacchetto per "Ruby2.0" senza?
ate

1
Hai chiesto il modo più semplice. Questo sarebbe, almeno fino a quando la versione ufficiale 2.x di Ruby non appare nel Software Center o fino a quando la versione Ruby 2.0.x si aggiorna al numero effettivo che è e non come il bug che hai.
Luis Alvarado,

Hmm ... ubuntuupdates.org/package/core/trusty/main/base/ruby2.0 non suggerisce che 2.0 sia già incluso nel repository "principale"?
ate

3
Sì, ma come hai detto non è il ramo 2.x ma l'1.9. Quindi dovrebbero risolverlo.
Luis Alvarado,

2
Sembra che entrambi gli interpreti 2.0 e 1.9 siano nel repository principale (con una strana dipendenza) - ma ruby-switch è stato cancellato per una ragione spuria.
ate

8

La versione Debian di Ruby non supporta diverse installazioni ruby ​​sullo stesso sistema. Debian ha obsoleto il pacchetto e Ubuntu lo ha rimosso dai repository. Dovresti usare rbenvper passare tra diverse versioni di rubini. Questo è il modo raccomandato dalla descrizione del pacchetto ruby-switch ed era il metodo che è stato discusso nel bug 737782 come preferito, attraverso si dice che nei repository non dovrebbe esserci più di una versione di ruby.

Ruby 2.0 è installato di default quando si installa il ruby2.0pacchetto e non sono necessarie altre azioni. Se il pacchetto è rubystato installato, si consiglia di rimuoverlo. Dovresti avere il file binario /usr/bin/ruby2.0disponibile sul tuo sistema.


2
Hmmm ... Quando ho installato il pacchetto ruby2.0, ho ottenuto un eseguibile ruby2.0 e un eseguibile ruby ​​1.9. Quando si interagisce con gemma, ruby1.9 sembra essere assunto come la versione ruby ​​del sistema. Su ulteriori indagini, ho scoperto che gli script (pur sostenendo di aver bisogno di ruby ​​2.0) funzionano davvero bene con ruby ​​1.9, quindi ho abbandonato il pacchetto ruby2.0. Volevo solo una versione ruby ​​- ovvero runy 2.0 - ma i pacchetti ubuntu 14.04 non sembravano permetterlo.
notte

@aSteve in Debian Non sembra avere questo problema, tramite Ubuntu usa quel metodo. Se ti piace, prova invece a creare un ambiente virtuale per ruby ​​2.0 con rbenv, solo per essere al sicuro.
Braiam,

2
lo sto sicuramente vedendo, e non ha senso. su apt-get install ruby2.0 Ottengo: Verranno installati i seguenti NUOVI pacchetti: libjs-jquery libruby1.9.1 libruby2.0 ruby ​​ruby1.9.1 ruby2.0 rubygem-integration
Josh Nankin


1
@jla no, in realtà, Debian sceglie di non supportare diverse versioni di Ruby , come puoi vedere nel log delle modifiche . Debian dice che supporterà solo una versione e gli strumenti per cambiare versione sono in qualche modo rotti, questa è più o meno la situazione in Debian. Ubuntu ha deciso di non fare il salto per 2.0 in quel momento.
Braiam,

8
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

puoi anche ln -fsforzare l'aggiornamento ed evitare di usare il sempre spaventosorm -rf
njzk2

5

Se vuoi passare da un rubino all'altro, ti consiglio di usare rvm ( https://rvm.io ). È un gestore di pacchetti e ti consente di installare molti rubini diversi (non solo quelli di Matz) su una macchina, sia locali per l'utente o globalmente per tutti gli utenti.

So che hai chiesto un "pacchetto", quindi forse questo non funzionerà per te. Ma ho pensato che potrebbe essere d'aiuto se questa è la tua macchina di sviluppo.

Il vantaggio di farlo in questo modo è che puoi installare un gemset per 2.1.1 e altri per 2.0 o 1.9.3, ecc. Ti consente anche di testare jruby, rubinius, ecc. Senza impegnare il tuo sistema su uno.

Non lo sto usando in produzione, ma a quanto pare è adatto sia a quello che allo sviluppo.

Ecco la guida introduttiva: https://rvm.io/rvm/install


1

Verso la fine del gioco, ma penso che una soluzione forse più completa dei update-alternativeslink simbolici sia questo uso , pubblicato qui verbalmente nel caso in cui altri siano morsi dalla stessa frustrazione e vorrebbero una soluzione più nativa. Questo gestisce tutti i file binari e le pagine man, rimuovendo preventivamente i riferimenti per evitare conflitti.

Avvertenze:

  • Penso che questo dovrà essere rieseguito se / quando una delle versioni di ruby ​​viene aggiornata.
  • Non sono un guru con update-alternativesquindi è possibile che questo sia eccessivo e / o fatto a malincuore.

Script (ho nominato 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

IIRC puoi semplicemente chiamare ${RECMD}e ${CMD}senza virgolette, invece di usare eval. In un'altra nota: prenderò in prestito "a malincuore". :)
muru,

È vero ... era un trucco quasi frettoloso. Fisso. Grazie :-)
r2evans,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.