루비 스위치없이 루비 2.0을 설치 하시겠습니까?


23

최신 Ubuntu 14.04에 루비 2.0을 설치하는 작업이 다소 실망 스럽습니다. 나는 패키지를 버리고 소스에서 설치할 수 있다는 것을 알고 있지만 가능하다면 패키지를 설치하는 것이 훨씬 낫다.

13.10의 루비에 대한이 질문 / 답변을 찾았습니다.

루비를 설치하는 방법?

불행히도이 전략은 실행 가능한 것처럼 보이지 않습니다. 루비 스위치 패키지는 14.04에서 삭제되었습니다.

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

패키지를 삭제 하면 나에게 전혀 관련이없는 것처럼 보이는 버그 가 언급 됩니다.

apt-get을 사용하여 ruby2.0을 설치하면 ruby1.9가 설치되고 기본 ruby ​​인터프리터가되는 이유에 대해 기쁘게 생각합니다. 나는 ruby2.0 바이너리를 얻지 만 (루비를 실행할 때 2.0 인터프리터에 의존하는) 스크립트는 그것을 선택하지 않습니다. 또한 보석 등을 사용할 때. 알. 루비 패키지 설치-2.0이 아닌 ruby1.9에 설치된 것으로 보입니다. 매우 불만족 스럽습니다.

누구나 표준 루비 인터프리터로 루비 2.0을 설치하는 가장 간단한 방법에 대한 힌트를 제공 할 수 있습니까? 루비 스위치없이 루비 1.9에서 2.0으로 전환하려면 어떻게해야합니까?

답변:


29

14.04에서 Ruby 2.x와 함께 제공되는 다음 PPA를 찾았습니다.

  • 우분투 14.04에 루비 2.1 추가

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

나는 또한 GoRails 에서 14.04에 Ruby를 설치 하는 일련의 지침 을 찾았 지만 오랫동안 PPA를 원할 것이라고 생각합니다.

  • Ubuntu 14.04에 Ruby 1.9, 2.0 또는 2.1 추가

    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

6
Ubuntu 14.04에 Ruby 2.0을 설치하려면 '개인 패키지 아카이브'를 추가해야합니까? "Ruby2.0"용 패키지가 없으면?
aSteve

1
가장 간단한 방법을 요청했습니다. 적어도 공식적인 2.x 버전의 루비가 소프트웨어 센터에 나타날 때까지 또는 루비 2.0.x 버전이 버그가 아닌 실제 숫자로 업데이트 될 때까지는 그럴 것입니다.
Luis Alvarado

흠 ... ubuntuupdates.org/package/core/trusty/main/base/ruby2.0 은 2.0이 이미 "main"저장소에 포함되어 있다고 제안 하지 않습니까 ?
aSteve

3
예. 그러나 언급했듯이 2.x 분기가 아니라 1.9입니다. 그래서 그들은 고쳐야합니다.
Luis Alvarado

2
2.0과 1.9 인터프리터가 모두 메인 리포지토리에있는 것처럼 보이지만 (이상한 종속성이 있음) 루비 스위치가 잘못된 이유로 삭제되었습니다.
aSteve

8

Ruby의 데비안 버전은 동일한 시스템에서 여러 루비 설치를 지원하지 않습니다. 데비안은 패키지를 폐기 했고 우분투 는 저장소에서 제거했습니다 . rbenv다른 루비 버전 사이를 전환 하는 데 사용해야 합니다. 이것은 루비 스위치 패키지 설명에 의해 권장되는 방법이며 저장소에 하나 이상의 루비 버전이 있으면 안된다는 말을 통해 버그 737782 에서 선호되는 방법이었습니다 .

ruby2.0패키지를 설치할 때 Ruby 2.0이 기본적으로 설치되며 다른 조치는 필요하지 않습니다. 패키지 ruby가 설치된 경우 제거하는 것이 좋습니다. /usr/bin/ruby2.0시스템 에서 바이너리를 사용할 수 있어야 합니다.


2
흠 ... ruby2.0 패키지를 설치했을 때, ruby2.0 실행 파일과 ruby ​​1.9 실행 파일이 생겼습니다. gem과 상호 작용할 때 ruby1.9는 시스템 루비 버전으로 간주됩니다. 추가 조사에서 스크립트 (루비 2.0이 필요하다고 주장하는 동안)가 실제로 루비 1.9에서 잘 작동한다는 것을 발견했습니다. 그래서 나는 루비 2.0 패키지를 버렸습니다. 나는 루비 버전 (runy 2.0)만을 원했지만 우분투 14.04 패키지는 그것을 허용하지 않는 것 같습니다.
aSteve

데비안의 @aSteve 나는 우분투를 통해 그 방법을 사용하여 그 문제가없는 것 같습니다. 원한다면 rbenv를 사용하여 ruby ​​2.0을위한 가상 환경을 만들어보십시오.
Braiam

2
나는 분명히 그것을보고 있으며, 말이되지 않습니다. apt-get install ruby2.0에서 다음을 얻습니다. 다음과 같은 새로운 패키지가 설치됩니다 : libjs-jquery libruby1.9.1 libruby2.0 ruby ​​ruby1.9.1 ruby2.0 rubygems-integration
Josh


1
@jla 아니오, 사실 데비안 은 changelog 에서 볼 수 있듯이 여러 버전의 Ruby를 지원하지 않기로 선택합니다 . 데비안은 단 하나의 버전 만 지원할 것이며, 버전을 전환하는 도구는 어떻게 든 망가졌으며, 이는 데비안의 상황과 거의 비슷하다고 말합니다. 우분투는 그 당시 2.0으로 도약하지 않기로 결정했습니다.
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

당신은 또한 ln -fs업데이트를 강요하고 항상 무서운 사용을 피할 수 있습니다rm -rf
njzk2

5

루비 사이를 전환하려면 rvm ( https://rvm.io )을 사용하는 것이 좋습니다 . 패키지 관리자이며 사용자에게 로컬이거나 모든 사용자를 위해 전 세계적으로 하나의 컴퓨터에 여러 가지 루비 를 설치할 수 있습니다 (Matz뿐만 아니라).

"패키지"를 요청 했으므로이 방법이 효과가 없을 수도 있습니다. 그러나 이것이 개발 기계라면 도움이 될 것이라고 생각했습니다.

이렇게하면 2.1.1 용 보석 세트와 2.0 또는 1.9.3 용 보석 세트를 설치할 수 있다는 장점이 있습니다. 또한 시스템을 하나에 커밋하지 않고도 jruby, rubinius 등을 테스트 할 수 있습니다.

저는 프로덕션 환경에서 사용하지 않지만 개발 및 개발에 적합합니다.

빠른 시작은 다음과 같습니다. https://rvm.io/rvm/install


1

게임 update-alternatives에서 늦었지만 하드 코딩 심볼릭 링크보다 더 완벽한 해결책은 다른 사람들이 같은 좌절에 물린 경우보다 네이티브 솔루션을 원할 경우를 위해 여기에 자세하게 게시 된 것입니다. 이것은 모든 바이너리 및 매뉴얼 페이지를 처리하여 충돌을 피하기 위해 참조를 먼저 제거합니다.

주의 사항 :

  • 루비 버전 중 하나가 업데이트 될 때 이것을 다시 실행해야한다고 생각합니다.
  • 나는 전문가가 update-alternatives아니기 때문에 이것은 과잉이거나 클루 징하게 할 수 있습니다.

스크립트 (이름은 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 당신은 단지 호출 할 수 있습니다 ${RECMD}${CMD}사용하는 대신, 따옴표없이 eval. 또 다른 메모 : 나는 "kludgingly"빌릴 것입니다. :)
muru

사실 ... 거의 거의 해킹이었다. 결정된. Thanks :-)
r2evans
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.