Установить ruby ​​2.0 без ruby-switch?

Задача установки ruby ​​2.0 на последнюю версию Ubuntu 14.04 довольно сложна. Я знаю, что могу отказаться от пакетов и установить их из исходного кода - но я бы предпочел установить пакет - если это возможно.

Я нашел этот вопрос / ответ о ruby ​​13.10, который выглядел так, как я хотел.

Как установить ruby?

К сожалению, стратегия не представляется жизнеспособной - пакет ruby-switch был удален в 14.04.

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

Удаление ссылок на пакеты ошибка , что, на мой взгляд, совершенно не связано.

Меня удивляет, почему установка ruby2.0 с помощью apt-get устанавливает ruby1.9 и делает его интерпретатором ruby ​​по умолчанию. Я получаю двоичный файл ruby2.0 - но сценарии (которые зависят от интерпретатора 2.0 при выполнении ruby) не поднимают его. Кроме того, когда я использую gem et. и др. установить пакеты ruby ​​- похоже, они установлены для ruby1.9, а не 2.0. Очень неудовлетворительно.

Кто-нибудь может подсказать, как наиболее просто установить ruby ​​2.0 в качестве стандартного интерпретатора ruby? Как я могу переключаться с ruby ​​1.9 на 2.0 без ruby-switch?

23
задан 13 April 2017 в 15:25

5 ответов

Для 14,04 я нашел следующие PPAs, которые идут с Ruby 2.x

  • , Добавляет Ruby 2.1 к Ubuntu 14.04

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

, я также нашел в GoRails набор инструкций устанавливать Ruby на 14,04, но я предполагаю, так как они длинны, Вы хотели бы PPA вместо этого.

  • Добавляет Ruby 1.9, 2.0 или 2.1 к Ubuntu 14.04

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

после добавления одного из них просто:

sudo apt-get update
sudo apt-get install ruby2.1 # In the case you want 2.1
0
ответ дан 13 April 2017 в 15:25

Версия Debian Ruby не поддерживает несколько рубиновых установок в той же системе. Debian obsoleted пакет и Ubuntu просто удалил его из репозиториев. Необходимо использовать rbenv для переключения между различными рубиновыми версиями. Это - рекомендуемый путь описанием пакета рубинового переключателя и было методом, который был обсужден в ошибка 737782 , как предпочтено, через это сказано, что не должно быть больше, чем только одна версия рубина в репозиториях.

Ruby 2.0 установлен по умолчанию при установке ruby2.0, пакет и никакое другое действие необходимы. Если пакет ruby был установлен, рекомендуется удалить его. У Вас должен быть двоичный файл /usr/bin/ruby2.0 доступный в Вашей системе.

0
ответ дан 13 April 2017 в 15:25
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
0
ответ дан 13 April 2017 в 15:25

Если Вы хотите переключиться между рубинами, я рекомендую использовать rvm ( https://rvm.io). Это - диспетчер пакетов, и это позволяет Вам устанавливать многие различные рубины (не только Matz) на одной машине, или локальной для пользователя или глобально для всех пользователей.

я знаю, что Вы попросили "пакет", поэтому возможно, это не собирается работать на Вас. Но я полагал, что могло бы помочь, является ли это Вашей машиной разработки.

преимущество выполнения его этот путь состоит в том, что можно установить один gemset для 2.1.1 и других для 2,0 или 1.9.3 и т.д. Это также позволяет Вам тестировать jruby, rubinius, и т.д. не передавая Вашу систему одной.

я не использую его на производстве, но по-видимому это подходит для этого, а также разработки.

Вот быстрый запуск: https://rvm.io/rvm/install

0
ответ дан 13 April 2017 в 15:25

Поздно в игре, но я думаю, возможно, больше-полное-решение, чем символьные ссылки жесткого кодирования являются этим использованием update-alternatives, отправленный здесь verbosely в случае, если другие укушены тем же разочарованием и хотели бы более встроенное решение. Это обрабатывает все двоичные файлы и страницы справочника, преимущественно удаляя ссылки сначала для предотвращения конфликтов.

Протесты:

  • я думаю, что это должно будет быть повторно выполнено, если/когда одна из рубиновых версий будет обновлена.
  • я не гуру с update-alternatives, таким образом, возможно, что это - излишество и/или сделанный kludgingly.

Сценарий (я назвал 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
0
ответ дан 13 April 2017 в 15:25

Другие вопросы по тегам:

Похожие вопросы: