ruby-switchなしでruby 2.0をインストールしますか?


23

私は、最新のUbuntu 14.04にruby 2.0をインストールするというタスクをかなりイライラさせています。私は、パッケージを放棄してソースからインストールできることを知っていますが、可能であれば、パッケージをインストールしたいです。

私は13.10にルビーに関するこの質問/回答を見つけました-これは私が望んでいたように見えました。

rubyのインストール方法は?

残念ながら、この戦略は実行可能ではないようです-ruby-switchパッケージは14.04で削除されました。

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

パッケージの削除は、私にはまったく無関係に見えるバグを参照しいます。

apt-getを使用してruby2.0をインストールするとruby1.9がインストールされ、それがデフォルトのrubyインタープリターになる理由に困惑しています。私はruby2.0バイナリを入手しますが、スクリプト(rubyの実行時に2.0インタープリターに依存する)はそれを取得しません。さらに、gem et。を使用すると 等 rubyパッケージをインストールする-これらは2.0ではなくruby1.9にインストールされているようです。非常に不十分です。

ruby 2.0を標準のrubyインタープリターとしてインストールする最も簡単な方法について、誰でもヒントを提供できますか?ruby-switchなしでruby 1.9から2.0に切り替えるにはどうすればよいですか?

回答:


29

14.04で、Ruby 2.xに付属する次のPPAを見つけました

  • Ruby 14.04をUbuntu 14.04に追加

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

また、14.04にRubyをインストールするための一連の手順をGoRailsで見つけましたが、長いので代わりにPPAが必要になると思います。

  • Ruby 1.9、2.0、または2.1をUbuntu 14.04に追加します

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

それらの1つを単純に追加した後:

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

6
Ubuntu 14.04にRuby 2.0をインストールするために、「個人パッケージアーカイブ」を追加する必要が本当にありますか?
aSteve

1
最も簡単な方法を求めました。これは少なくとも、Rubyの公式2.xバージョンがSoftware Centerに表示されるまで、またはRuby 2.0.xバージョンが実際の番号に更新されて、バグが気に入らなくなるまでです。
ルイスアルバラード14

うーん... ubuntuupdates.org/package/core/trusty/main/base/ruby2.0は、2.0がすでに「メイン」リポジトリに含まれていることを示唆していませんか?
aSteve 14

3
はい、しかしあなたが述べたように、それは2.xブランチではなく1.9です。だから、彼らはそれを修正する必要があります。
ルイスアルバラード14

2
2.0と1.9の両方のインタープリターが(奇妙な依存関係で)メインリポジトリにあるように見えます-しかし、ruby-switchは誤った理由で削除されました。
aSteve 14

8

DebianバージョンのRubyは、同じシステム上での複数のrubyインストールをサポートしていません。Debianはパッケージ廃止しUbuntuはリポジトリからパッケージ削除しました。rbenv異なるrubyバージョンを切り替えるために使用する必要があります。これはruby-switchパッケージの説明で推奨される方法であり、推奨されるバグ737782で議論されている方法でした。リポジトリにはrubyのバージョンが1つだけであるべきだと言われています。

ruby2.0パッケージをインストールすると、Ruby 2.0がデフォルトでインストールされ、他のアクションは不要です。パッケージrubyがインストールされている場合は、パッケージを削除することをお勧めします。/usr/bin/ruby2.0システムでバイナリを使用できるようにする必要があります。


2
うーん... ruby​​2.0パッケージをインストールすると、ruby2.0実行可能ファイルとruby 1.9実行可能ファイルが手に入りました。gemと対話するとき、ruby1.9はシステムrubyバージョンであると想定されたようです。さらなる調査の結果、スクリプトが(ruby 2.0が必要であると主張しながら)ruby 1.9で実際に正常に動作することを発見しました。そのため、ruby2.0パッケージを放棄しました。私はただ一つのルビーバージョン-すなわちruny 2.0-が欲しかったのですが、ubuntu 14.04パッケージはそれを許可していないようでした。
aSteve 14

Debianの@aSteveは、Ubuntuがその方法を使用しているので、その問題はないようです。必要に応じて、安全のために、代わりにrbenvを使用してruby 2.0の仮想環境を作成してみてください。
Braiam

2
私は間違いなくそれを見ています、そしてそれは意味がありません。libjs-jqueryのlibruby1.9.1 libruby2.0ルビーruby1.9.1 ruby2.0 RubyGemsの統合:次の新しいパッケージがインストールされます:ruby2.0 I GETインストールapt-getの上
ジョシュ・南京


1
@jlaいいえ、実際には、Debian changelogでわかるように、Rubyのいくつかのバージョンをサポートしないことを選択しています。Debianは1つのバージョンのみをサポートし、バージョンを切り替えるためのツールが何らかの形で壊れていると言います。これは多かれ少なかれDebianの状況です。Ubuntuは、その時点では2.0に飛躍しないことを決定しました。
14年

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)を使用することをお勧めします。これはパッケージマネージャーであり、1つのマシンに(Matzだけでなく)多くの異なるルビーをインストールできます。これは、ユーザーのローカルまたはすべてのユーザーに対してグローバルに実行できます。

あなたが「パッケージ」を要求したことは知っているので、おそらくこれはあなたのために機能しないでしょう。しかし、これがあなたの開発マシンなら助けになると思いました。

この方法で行う利点は、2.1.1用に1つのgemsetをインストールし、2.0または1.9.3など用に他のgemsetをインストールできることです。また、システムを1つにコミットせずにjruby、rubiniusなどをテストできます。

私は本番環境では使用していませんが、明らかに開発だけでなくその用途にも適しています。

これがクイックスタートです:https : //rvm.io/rvm/install


1

ゲームの後期ですが、シンボリックリンクをハードコーディングするよりもおそらく完全なソリューションはupdate-alternatives、他の人が同じ欲求不満に噛まれてよりネイティブなソリューションを望んでいる場合に、ここで冗長に投稿されたこの使用です。これはすべてのバイナリとマニュアルページを処理し、競合を避けるために先に参照を先に削除します。

警告:

  • Rubyのバージョンの1つが更新された場合は、これを再実行する必要があると思います。
  • 私は第一人者ではありませんので、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"を借ります。:)
ムル

本当です...それは、ほとんど嫌なハックでした。一定。ありがとう:-)
r2evans
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.