【奮闘記】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ってなんだ。」
ソフトウェアである限られた言語でしか使えない状態から多言語が使えるように対応すること。 d.hatena.ne.jp
調べてもそれと今回のことがどう繋がるのかよくわからなかったです。
でも`Gem::LoadError
とあるのでgem関連に問題があるのか。
とりあえずgoogleで「gem loaderror」で検索。
「ほうほう。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検索してみても今回はなかなか解決策が見つからなかったのでエラーメッセージから読み取って試行錯誤してみました。
フレームワークはバージョンがきっちりしてて面倒ですが、エラーメッセージも的確でやはり便利なものだと感じました。 引き続き詰まったところがあったらシェアしていきます。
とりあえず解決してよかったです。同じ問題に当たってしまった方よかったらご参考ください。