Задача установки ruby 2.0 на последнюю версию Ubuntu 14.04 довольно сложна. Я знаю, что могу отказаться от пакетов и установить их из исходного кода - но я бы предпочел установить пакет - если это возможно.
Я нашел этот вопрос / ответ о ruby 13.10, который выглядел так, как я хотел.
К сожалению, стратегия не представляется жизнеспособной - пакет 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?
Для 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
Версия Debian Ruby не поддерживает несколько рубиновых установок в той же системе. Debian obsoleted пакет и Ubuntu просто удалил его из репозиториев. Необходимо использовать rbenv
для переключения между различными рубиновыми версиями. Это - рекомендуемый путь описанием пакета рубинового переключателя и было методом, который был обсужден в ошибка 737782 , как предпочтено, через это сказано, что не должно быть больше, чем только одна версия рубина в репозиториях.
Ruby 2.0 установлен по умолчанию при установке ruby2.0
, пакет и никакое другое действие необходимы. Если пакет ruby
был установлен, рекомендуется удалить его. У Вас должен быть двоичный файл /usr/bin/ruby2.0
доступный в Вашей системе.
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
Если Вы хотите переключиться между рубинами, я рекомендую использовать rvm ( https://rvm.io). Это - диспетчер пакетов, и это позволяет Вам устанавливать многие различные рубины (не только Matz) на одной машине, или локальной для пользователя или глобально для всех пользователей.
я знаю, что Вы попросили "пакет", поэтому возможно, это не собирается работать на Вас. Но я полагал, что могло бы помочь, является ли это Вашей машиной разработки.
преимущество выполнения его этот путь состоит в том, что можно установить один gemset для 2.1.1 и других для 2,0 или 1.9.3 и т.д. Это также позволяет Вам тестировать jruby, rubinius, и т.д. не передавая Вашу систему одной.
я не использую его на производстве, но по-видимому это подходит для этого, а также разработки.
Вот быстрый запуск: https://rvm.io/rvm/install
Поздно в игре, но я думаю, возможно, больше-полное-решение, чем символьные ссылки жесткого кодирования являются этим использованием 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