LoginSignup
13
5

More than 5 years have passed since last update.

RubygemでWARN: Clearing out unresolved specs.が出た時の対応

Posted at

このエラーって何?

「同一のgemが複数バージョンでインストールされていて、システムでどれを選ぶか決めきれないよ」という警告。

解決策

システムで決めきれるようにすれば良い

方法は2つ
1. 旧バージョンのgemを削除し、選択肢を1つにする
2. 具体的なバージョンを指定する

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ファイルに追記する

Gemfile
gem 'json', '1.8.3'

これで解決!

13
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
5