文系が趣味のプログラミング頑張ってみるブログ

楽しいです。基本はandroidやってます。api作るのにphp使ってたんですがrailsに乗り換えようとしてます。

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でも同文

`dup': can't dup NilClass (TypeError)  

 以下だいたい全部のコマンドで同文

何もできなくなり、いろいろ頑張ってました。

 

とりあえず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に下げる

teratail.com

 

すいませんこれはここで質問したことなのですが、とりあえずこの方法でも動くっぽいです。なんかrubyのバージョン変更しようと思ったら別で引っかかったので試すの諦めました。

 

 

要するにsprocketsのバージョンをgemfileで指定してあげればなんかいい感じに動くみたいです。

というかデフォルトのgemファイルを指定したらそのバージョンで使えるってことすら知りませんでした。無知すぎる。

 

もしかしたらそんなことに引っかかるのは僕だけかもしれませんが(ネットで検索しても全然出てこなかったので)もし引っかかってる人がいたらこれで解決したら幸いです。