情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

Ubuntu:Rubygems (gemコマンド) のアップデート方法について(Rubyをrbenv+ruby-buildでインストールした場合)

Ruby (2) Ruby on Rails (2) Ubuntu (19)

rails new したときに、Rubygemsのバージョンが古い、という警告が出てしまいました。

アップデート方法を調べてみると、まず「gem update --system」という方法があるようなのですが、これは失敗しました。

Ubuntu の場合は、パッケージマネージャを利用せよ、ということでした。

しかし、そもそもgemコマンドは、パッケージマネージャでインストール(apt-get install)したものではなく、Ruby on Rails公式ドキュメントに従って、rbenvを利用してインストールしたもので、=/.rbenv/shims/gem にインストールされていました。

この場合の rubygems のアップデート方法について調べたので、メモしておきます。

rails new でWarningが出る

「rails new app-name」コマンドを実行した際に次のエラーが出ました。

$ rails new app-name
...
Warning: You're using Rubygems 1.8.23 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance.
...

gem update --system はダメ

ここにはインストール方法が表示されていないので調べてみると、「$ gem update --system」を実行するとアップデートできるというのを見つけたのですが、こちらはこちらで、次のエラーが出て実行できませんでした。

$ gem update --system
ERROR:  While executing gem ... (RuntimeError)
    gem update --system is disabled on Debian, because it will overwrite the content of the rubygems Debian package, and might break your Debian system in subtle ways. The Debian-supported way to update rubygems is through apt-get, using Debian official repositories.
If you really know what you are doing, you can still update rubygems by setting the REALLY_GEM_UPDATE_SYSTEM environment variable, but please remember that this is completely unsupported by Debian.

パッケージマネージャでインストールした(apt-getでインストールした)rubygemsが上書きされちゃうから、ちゃんとパッケージマネージャでアップデートしてね的なことが表示されました。

apt-get?

しかし、そもそも ruby をインストールするのに、apt-get は使っていませんでした。

Ruby on Rails の公式ドキュメントに従ったところ、 rbenv というコマンドと、そのプラグインである ruby-build を使ってインストールしていました。

なので、それ関連でどうにかするのが良いはずです。

そのため、他に見つけた「$ gem install rubygems-update」「$ update_rubygems」でアップデートする方法も良さそうなのですが、優先度は後回しに。

rbenv-gem-update?

そこで、rbenvプラグイン周りを探してみると、公式のプラグイン一覧に、「rbenv-gem-update」というものがありました。まず、次のコマンドでインストールします。

$ git clone https://github.com/nicknovitski/rbenv-gem-update ~/.rbenv/plugins/rbenv-gem-update

そして、rbenv install 2.2.2 で、rubyごとインストールしました(rbenv install する際に~と書いてあったので)。

$ rbenv install 2.2.2
rbenv: /home/did2/.rbenv/versions/2.2.2 already exists
continue with installation? (y/N) y
Downloading ruby-2.2.2.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/5ffc0f317e429e6b29d4a98ac521c3ce65481bfd22a8cf845fa02a7b113d9b44
Installing ruby-2.2.2...
Installed ruby-2.2.2 to /home/did2/.rbenv/versions/2.2.2

Updating rubygems-update
Fetching: rubygems-update-2.4.8.gem (100%)
Successfully installed rubygems-update-2.4.8
Parsing documentation for rubygems-update-2.4.8
Installing ri documentation for rubygems-update-2.4.8
Installing darkfish documentation for rubygems-update-2.4.8
Done installing documentation for rubygems-update after 1 seconds
Parsing documentation for rubygems-update-2.4.8
Done installing documentation for rubygems-update after 0 seconds
Installing RubyGems 2.4.8
RubyGems 2.4.8 installed
Parsing documentation for rubygems-2.4.8
Installing ri documentation for rubygems-2.4.8

...

しかし、終了後に「$ gem -v」してみても、1.8.23のままでした。

よくよくこのプラグインの説明を見てみると、この rbenv-gem-update は、そもそも内部で「gem update --system」を実行しているだけでした。これではダメそうです。

rubygems-update

ただ、この出力をよく見てみると、rubygems-update がインストールされていることがわかりました。

先ほど、飛ばした方法です。

そこで、結局「$ update-rubygems」を実行してみました。

しかし、これがまたエラーになってしまいました。

$ update_rubygems
rbenv: version `system' is not installed

エラーが怪しいので、先ほどのプラグインをとりあえず削除しました。

$ rm -rf ~/.rbenv/plugins/rbenv-gem-update

ただ、これでも同じエラーになってしまいました。

エラー回避

別のパターンですが、同じエラーが出ている記事を参考に、次の手順でやり直してみると、うまくいきました。

$ rbenv global 2.2.2
$ update_rubygems
RubyGems 2.4.8 installed
Parsing documentation for rubygems-2.4.8
Installing ri documentation for rubygems-2.4.8

=== 2.4.8 / 2015-06-08

Bug fixes:

* Tightened API endpoint checks for CVE-2015-3900


------------------------------------------------------------------------------

RubyGems installed the following executables:
        /home/did2/.rbenv/versions/2.2.2/bin/gem

Ruby Interactive (ri) documentation was installed. ri is kind of like man 
pages for ruby libraries. You may access it like this:
  ri Classname
  ri Classname.class_method
  ri Classname#instance_method
If you do not wish to install this documentation in the future, use the
--no-document flag, or set it as the default in your ~/.gemrc file. See
'gem help env' for details.

gem のバージョン確認

$ gem -v
2.4.8

まとめ

結論として、アップデートは、「$ update_rubygems」で。

(ただ、そもそも今回は rbenv global 2.2.2 のバージョン指定をしていなかったのが原因だったかも)

コメント(0)

新しいコメントを投稿