sprocketsのバージョンのせいでRailsコマンドが「 can't dup NilClass (TypeError) 」で全く実行できなくなった。
久々の更新
rails初心者からなかなか抜け出せない僕ですが、最近railsで開発しようと思った時に最初から躓いて困った話です。
まあ簡単にいえばrails new してそのままのgemfileでbundle installしたところ、インストールはうまくいくのですがそのあと
rails s
[ルートdirectory]/.rbenv/versions/2.4.0-dev/lib/ruby/gems/2.4.0/gems/sprockets-3.7.1/lib/sprockets/utils.rb:40:in `dup': can't dup NilClass (TypeError)
rails gでも同文
以下だいたい全部のコマンドで同文
何もできなくなり、いろいろ頑張ってました。
とりあえずrails のデフォルトで存在するアセットパイプラインとか使えるようにするsprocketsというのがエラーの原因らしいので原因探ってたのですが、どうやらsprocketsと最新のrubyの互換性の問題らしいです。
また自分で調べてたらrackとか言うライブラリとsprocketsのバージョンの互換性の問題なんじゃないかということがわかってきたので解決法らしきものがわかりました。
2つあって、一つはterateilで質問したら返ってきた答えなので試してないのですが、どちらかやれば動くんじゃないでしょうか
1・sprocketsのバージョン指定で3.6.0より前にする
gemfileに
gem 'sprockets','3.6.0'
という項目を追加します。
するとrackとのバージョン互換性に問題がなくなりなんか動きます
その時のrackのバージョンは2.0.1でした。
なのでこれでダメならなんか色々sprocketsのバージョン変えてみてください
2・sprocketsを4.0.1-beta以上にするかrubyのバージョンを2.3に下げる
すいませんこれはここで質問したことなのですが、とりあえずこの方法でも動くっぽいです。なんかrubyのバージョン変更しようと思ったら別で引っかかったので試すの諦めました。
要するにsprocketsのバージョンをgemfileで指定してあげればなんかいい感じに動くみたいです。
というかデフォルトのgemファイルを指定したらそのバージョンで使えるってことすら知りませんでした。無知すぎる。
もしかしたらそんなことに引っかかるのは僕だけかもしれませんが(ネットで検索しても全然出てこなかったので)もし引っかかってる人がいたらこれで解決したら幸いです。