1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Rubyのバージョンを管理するためのrbenvの使い方

2022-02-03 08:48:04

ユーザーディレクトリに複数のバージョンのrubyをインストールして使用することを管理するためにrbenvが使用され、代替手段としてrvmが使用されます。その違いは rbenv のドキュメントで説明されており、コミュニティで議論されています。
システム要件

OSX:インターネットアクセスの良い場所を探し、アプリストアからxcode.appをダウンロードし、インストール後、実行し、設定のダウンロードにCommand Line Toolsをインストールしてください。

Linuxです。jrubyのみjreがある場合は、開発環境(コンパイル・リンクツール、rubyの依存関係)をインストールしてください。
rbenvのインストール

OSxではhomebrewで直接インストールできます。以下は手動でのインストール手順です。(zshを使わない人は、自分のシェルの設定ファイルに置き換えてください)

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:992)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
	at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:336)
	at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:300)
	at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:185)
	at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.java:224)
	at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.java:108)
	at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.java:88)
	at okhttp3.internal.connection.Transmitter.newExchange(Transmitter.java:169)
	at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:41)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
	at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
	at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
	at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
	at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
	at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:221)
	at okhttp3.RealCall.execute(RealCall.java:81)
	at com.jftech.investment.cloud.impl.sync.NewInformationSyncService.getImgFileObject(NewInformationSyncService.java:469)
	at com.jftech.investment.cloud.impl.sync.NewInformationSyncService.getThumbnailId(NewInformationSyncService.java:505)
	at com.jftech.investment.cloud.impl.sync.NewInformationSyncService.getThumbnailId(NewInformationSyncService.java:519)
	at com.jftech.investment.cloud.impl.sync.NewInformationSyncService.getMorningPost(NewInformationSyncService.java:537)
	at com.jftech.investment.cloud.impl.sync.NewInformationSyncService.saveMorningPost(NewInformationSyncService.java:334)
	at com.jftech.investment.cloud.impl.sync.NewInformationSyncService.lambda$null$1(NewInformationSyncService.java:226)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
	at sun.security.ssl.InputRecord.read(InputRecord.java:505)
	at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973)
	... 32 common frames omitted

そして、次のコードを ~/.bash_profile に記述します。

System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");

注 Unubtu は ~/.bashrc に、zsh ユーザーは ~/.zshrc に置く必要があります。

その後、ターミナルを開き直して、rbenvを実行してください。
使用方法
rubyのインストール

rbenv install --list # List all ruby versions
rbenv install 1.9.3-p392 # install 1.9.3-p392
rbenv install jruby-1.7.3 # install jruby-1.7.3



バージョン一覧

rbenv versions # List the installed versions
rbenv version # List the version in use



設定バージョン

rbenv global 1.9.3-p392 # The default is 1.9.3-p392
rbenv shell 1.9.3-p392 # The current shell uses 1.9.3-p392, which sets an `RBENV_VERSION` environment variable
rbenv local jruby-1.7.3 # The current directory uses jruby-1.7.3, which generates a `.rbenv-version` file



MacOSXでRubyをコンパイルするとirbで中国語が入力できない場合の対処法

homebrew用のreadlineをインストールし、ソースディレクトリに移動してreadline.bundleを再コンパイルしてインストールします。

brew install readline
brew link readline
cd src/ruby-1.9.3-p392/ext/readline
ruby extconf.rb --with-readline-dir=$(brew --prefix readline)
make install



rbenvの下での解決策

brew install readline
CONFIGURE_OPTS="--disable-install-doc --with-readline-dir=$(brew --prefix readline)" rbenv install 1.9.3-p392



OS X 10.7+ での ruby-2.0.0-p0 については、https://github.com/sstephenson/ruby-build/wiki を参照してください。
その他

rbenv rehash # This command must be run whenever you switch ruby versions and after bundle install
rbenv which irb # List the full path to the irb command
rbenv whence irb # List the versions of the command that contain irb



rbenv で gemset を使用する
はじめに

rvmの最も便利な部分はgemsetです。rbenvはプラグインを通して実際にgemsetを使用することができます。
インストール

MacOSのbrewでは、コマンド1つでOKです。

brew install rbenv-gemset



使用方法
gemsetの作成

rbenv gemset create 1.9.3-p392 ruby-china


具体的な使用方法

    プロジェクトのルートで、.rbenv-gemsets ファイルに使いたい gemset の名前を入れます。.rbenv-gemsets ファイルがある場合、bundle コマンドを実行すると、設定された gemset に対して操作します。

  echo ruby-china > .rbenv-gemsets



    現在のディレクトリに .rbenv-gemsets ファイルがない場合、bundle コマンド (--path 引数なし) は現在のバージョンの ruby 用の gemset として実行されます。これは、rvm のグローバル gemset に相当します。