MORITOMOMENT

登山好きエンジニアのテックブログ

プログラミング・アウトドア関連を中心に発信

【奮闘記】rails newでactivesupportのバージョンコンフリクトが起きた

概要

rails newで新しいプロジェクトを作ろうとしたらactivesupportのバージョンコンフリクトが起きてしまいました。 結果的にrailsのバージョンとactivesupportのバージョンを合わせないといけないようです。特に今回はrailsチュートリアルに沿っているため、v5.1.6指定です。それより新しいv5.2.2などがインストールされていたために、activesupportのバージョンコンフリクトが起きてしまったようです。 先に結論だけ述べておくと、「railsのバージョンより新しいバージョンのactivesupportがインストールされてると競合してしまいエラーが起こる」ってことがわかり、無事解決しました。以下奮闘記ですので、よかったら僕の試行錯誤ストーリーをご覧ください。

PC環境

OS: MacOS Mojave クラウドIDEではなくてローカル環境でやってます。

奮闘記

Railsチュートリアル第二章を始めようとしたら、一歩目のrails newで躓きました。 ディレクト~/environment/rails _5.1.6_ new toy_appとterminalで実行すると以下のように出力されました。

The i18n gem is not available. Please add it to your Gemfile and run bundle install
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/specification.rb:2278:in `check_version_conflict': can't activate activesupport-5.2.2, already activated activesupport-5.1.6.1 (Gem::LoadError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/specification.rb:1407:in `activate'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:89:in `block in require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:88:in `each'
         ・
         ・
         ・
    from
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:39:in `require'
    from /Library/Ruby/Gems/2.3.0/gems/railties-5.1.6.1/exe/rails:9:in `<top (required)>'
    from /usr/local/bin/rails:22:in `load'
    from /usr/local/bin/rails:22:in `<main>'

ディレクトリでrails -vなどrailsコマンドを使用すると同様の出力となります。 ディレクト~/environment/hello_app/ではrailsコマンドが問題なく使用可能となっています。

まずはThe i18n gem is not available. Please add it to your Gemfile and run bundle installについて考えてみました。

「どこのGemfileのことなんだろう。そもそもi18nってなんだ。」

i18nはアイエイティーンエヌと呼ばれるそうです。

ソフトウェアである限られた言語でしか使えない状態から多言語が使えるように対応すること。 d.hatena.ne.jp

調べてもそれと今回のことがどう繋がるのかよくわからなかったです。

でも`Gem::LoadErrorとあるのでgem関連に問題があるのか。

とりあえずgoogleで「gem loaderror」で検索。

qiita.com

「ほうほう。bundle updateすればいいのかな?とりあえずやってみよう。」

実行結果は

Could not locate Gemfile

そりゃそうです。ディレクトリにGemfileはありませんから。

よく出力を読むと、`check_version_conflict': can't activate activesupport-5.2.2, already activated activesupport-5.1.6.1とある。

よく読んだら、すでにv5.1.6.1のactivesupportが動作してて、v5.2.2のactivesupportは動作できないよっていうメッセージを出してくれています。

「もしかしたら、railsのv5.2.2として動いているのか??ンv5.1.6に指定してrails newしているのに。」

とりあえず、現在gemでインストールしたrails関連をgem list railsで確認します。 すると、以下の出力が得られました。

*** LOCAL GEMS ***

autoprefixer-rails (9.3.1, 6.7.7)
bootstrap3-datetimepicker-rails (4.17.47)
coffee-rails (4.2.2)
jquery-rails (4.3.3, 4.3.1, 4.2.2)
momentjs-rails (2.17.1)
rails (5.1.6.1, 5.1.6, 5.0.2)
rails-dom-testing (2.0.3, 2.0.2)
rails-html-sanitizer (1.0.4, 1.0.3)
sass-rails (5.0.7, 5.0.6)
sprockets-rails (3.2.1, 3.2.0)
tether-rails (1.4.0)

「んーv5.2.2が見当たらない。いや、activesupportのことか??」

ということで、gem list activesupportで調べると

*** LOCAL GEMS ***

activesupport (5.2.2, 5.2.1.1, 5.1.6.1, 5.1.6, 5.0.2)

「もしかしたらactivesupportのv5.1.6.1をアンインストールしちゃえばいいのかな??」 sudo gem uninstall -v '5.1.6.1'でアンインストール後、再びrails newをしたら、

/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/dependency.rb:319:in `to_specs': Could not find 'activesupport' (= 5.1.6.1) - did find: [activesupport-5.2.2,activesupport-5.2.1.1,activesupport-5.1.6,activesupport-5.0.2] (Gem::LoadError)

「あれ今度はv5.1.6がみつからない。笑 てことはもしかしたらv5.1.6.1はインストールしなおして、v5.2.2をアンインストールすればいけるんじゃないか??」

てことで、

sudo gem install activesupport -v '5.1.6.1'

を実行した後、sudo gem uninstall -v '5.2.2'を実行しました。そして再びrails new。そしたら、

/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0
/rubygems/specification.rb:2278:in
 `check_version_conflict': can't activate activesupport-5.2.1.1, already activated activesupport-5.1.6.1 (Gem::LoadError)

もう笑うしかないです。

「あれ、でもちょっと待てよ。最初v5.1.6.1をuninstallしたら、v5.1.6.1が見つからないと出たからv5.1.6.1は必要だと。v5.2.2をuninstallされたら次はv5.2.1.1とコンフリクト。お、もしかして大きいバージョンを優先的に読み込む的な動きをするのか??じゃあv5.2系のactivesupportをすべてuninstallしてみよう!」

$sudo gem uninstall activesupport -v '5.2.1.1'

You have requested to uninstall the gem:
    activesupport-5.2.1.1

actionpack-5.2.1.1 depends on activesupport (= 5.2.1.1)
actionview-5.2.1.1 depends on activesupport (= 5.2.1.1)
activejob-5.2.1.1 depends on activesupport (= 5.2.1.1)
activemodel-5.2.1.1 depends on activesupport (= 5.2.1.1)
activerecord-5.2.1.1 depends on activesupport (= 5.2.1.1)
If you remove this gem, these dependencies will not be met.
Continue with Uninstall? [yN]  

これらはactivesupportのv5.2.1.1に依存するようなので一緒にuninstallしておいていいでしょう。

で、再びrails _5.1.6_ new toy_appをやってみると、

きました!無事rails newコマンドが成功でした!

まとめ

ローカル環境だとやっぱりバージョンコンフリクトがめんどくさいです。 google検索してみても今回はなかなか解決策が見つからなかったのでエラーメッセージから読み取って試行錯誤してみました。

フレームワークはバージョンがきっちりしてて面倒ですが、エラーメッセージも的確でやはり便利なものだと感じました。 引き続き詰まったところがあったらシェアしていきます。

とりあえず解決してよかったです。同じ問題に当たってしまった方よかったらご参考ください。