#このエラーって何?
「同一のgemが複数バージョンでインストールされていて、システムでどれを選ぶか決めきれないよ」という警告。
#解決策
システムで決めきれるようにすれば良い
方法は2つ
- 旧バージョンのgemを削除し、選択肢を1つにする
- 具体的なバージョンを指定する
1はやや乱暴ですが、使えるのならこちらが良いと思います。
几帳面な方や1が(権限的に)使えない方は2を使いましょう。
#1.旧バージョンのgemを削除し、選択肢を1つにする
gem cleanup
これだけで良いです。
場合によってはsudo gem cleanup
かもしれません。
#2.具体的なバージョンを指定する
- 古いバージョンのgemを消すといろいろまずい
-
gem cleanup
をするにはsudoを行う権限が必要なのに、システム上権限を持っていない(持てない)
等の場合はこちらの方法にしましょう。
###step1: 何がエラーになっているかを確認する
例えばgem cleanup
をした際に権限が無いとこんなエラーが返ってきます。
$ gem cleanup
Cleaning up installed gems...
Attempting to uninstall json-1.7.7
Unable to uninstall json-1.7.7:
Gem::InstallError: json is not installed in GEM_HOME, try:
gem uninstall -i /opt/rh/ruby200/root/usr/share/gems json
で、ここでtryと言われているコードを実行しても権限なくてダメです。
(そもそもsudoを行う権限は持っていません)
$ gem uninstall -i /opt/rh/ruby200/root/usr/share/gems json
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /opt/rh/ruby200/root/usr/share/gems directory.
###step2: gemのバージョンを確認する
$ gem list -a | grep json。
json (1.8.3, 1.7.7)
新版の1.8.3と旧版の1.7.7が混在していることがわかります。
※gem cleanupではAttempting to uninstall json-1.7.7
の記述があるため、この旧版の1.7.7を削除しようとしたようです。
###step3: 新しいバージョンをgemファイルに追記する
gem 'json', '1.8.3'
これで解決!