Instale o ruby 2.0 sem o ruby-switch?

23

Estou achando a tarefa de instalar o ruby 2.0 no ultimo Ubuntu 14.04 bastante frustrante. Estou ciente de que eu poderia abrir mão dos pacotes e instalar a partir do código-fonte - mas prefiro instalar um pacote - se isso for possível.

Eu encontrei esta pergunta / resposta sobre ruby no 13.10 - que parecia com o que eu queria.

Como instalar o ruby?

Infelizmente, a estratégia não parece viável - o pacote ruby-switch foi excluído em 14.04.

link

A exclusão do pacote referencia um bug que, para mim, parece totalmente não relacionado.

Eu estou confuso sobre por que instalar o ruby2.0 usando o apt-get instala o ruby1.9 e faz dele o interpretador padrão do ruby. Eu recebo um binário ruby2.0 - mas os scripts (que dependem de um interpretador 2.0 ao executar o ruby) não o pegam. Além disso, quando eu uso gem et. al. para instalar pacotes ruby - estes parecem estar instalados para ruby1.9 em vez de 2.0. Muito insatisfatório.

Alguém pode oferecer uma dica sobre a maneira mais direta de instalar o ruby 2.0 como o interpretador padrão ruby? Como devo mudar de ruby 1.9 para 2.0 sem o ruby-switch?

    
por aSteve 21.04.2014 / 18:39

5 respostas

29

Para o 14.04 eu encontrei os seguintes PPAs que vêm com o Ruby 2.x

  • Adiciona o Ruby 2.1 ao Ubuntu 14.04

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

Eu também encontrei no GoRails um conjunto de instruções para instalar o Ruby no dia 14.04, mas acredito que eles sejam longos gostaria de um PPA.

  • Adiciona o Ruby 1.9, 2.0 ou 2.1 ao Ubuntu 14.04

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

Depois de adicionar um deles, simplesmente:

sudo apt-get update
sudo apt-get install ruby2.1 # In the case you want 2.1
    
por Luis Alvarado 21.04.2014 / 19:28
8

A versão Debian do Ruby não suporta várias instalações ruby no mesmo sistema. O Debian tornou obsoleto o pacote e O Ubuntu acabou de removê-lo dos repositórios. Você deve usar rbenv para alternar entre diferentes versões do ruby. Esta é a maneira recomendada pela descrição do pacote ruby-switch e foi o método que foi discutido no bug bug 737782 como preferir, através dele é dito que não deve haver mais do que apenas uma versão do ruby nos repositórios.

O Ruby 2.0 é instalado por padrão ao instalar o pacote ruby2.0 e nenhuma outra ação é necessária. Se o pacote ruby foi instalado, é recomendado removê-lo. Você deve ter o binário /usr/bin/ruby2.0 disponível em seu sistema.

    
por Braiam 29.04.2014 / 15:56
7
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
    
por rjspotter 21.11.2014 / 00:22
5

Se você quiser alternar entre rubis, recomendo usar o rvm ( link ). É um gerenciador de pacotes e permite que você instale muitos diferentes rubis (não apenas o Matz) em uma máquina, seja local para o usuário ou globalmente para todos os usuários.

Eu sei que você pediu um "pacote", então talvez isso não funcione para você. Mas achei que poderia ajudar se esta é sua máquina de desenvolvimento.

O benefício de fazer isso dessa maneira é que você pode instalar um gemset para 2.1.1 e outros para 2.0 ou 1.9.3, etc. Ele também permite que você teste jruby, rubinius, etc. sem comprometer seu sistema a um .

Eu não estou usando em produção, mas aparentemente é adequado para isso, assim como para desenvolvimento.

Este é o início rápido: link

    
por Louis 29.04.2014 / 02:33
1

No final do jogo, mas acho que uma solução talvez mais completa do que links simbólicos codificados é esse uso de update-alternatives , postado aqui com detalhes, caso outros sejam mordidos pela mesma frustração e gostariam de uma solução mais nativa. Isso lida com todos os binários e man pages, removendo preventivamente as referências primeiro para evitar conflitos.

Advertências:

  • Acho que isso precisará ser executado novamente se / quando uma das versões do ruby for atualizada.
  • Eu não sou um guru com update-alternatives , então é possível que isso seja um exagero e / ou feito de forma brusca.

Script (denominei 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"
[[ "" = "-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
    
por r2evans 20.04.2015 / 01:17