Circular dependency detected while autoloading constant 定数消しちゃって1日消し飛ぶ
Circular dependency detected while autoloading constant
Rails 4で、autoloadingの途中でCircular dependency detected while autoloading constant が出て、手も足もでねえ、という現象に遭遇しました。。。
これを招いた原因は「参照してる定数消しちゃってた」というしょぼい話。。。そんなの一瞬で気付けそうなものですが、以下のような理由で遠回りしてしまいました。
事件はメッセージで指摘されるファイルで起きてない
autoloadingでHelper読み込んでる途中で「HogeHelperの読み込みでCircular dependency云々、、、」というメッセージが出たので、HogeHelperなんて触ってないけどな、と思いながらHoge Helperまわりをぐるぐる調べるも原因はつかめず。
「Circular dependencyっつーくらいだからこのhelper消したら出なくなるかな」って消してみたところ、「FugaHelperの読み込みでCircular dependency云々、、、」というメッセージが出て、ああ、原因はHogeHelperじゃないなと。
直前のコミットの内容に関係ありそうなHelperの中を見ていくと、「あ、この定数さっき消したわ」というのがあり、それを戻したら動きました。
なんかエラーメッセージ変ですね。
原因は、includeしているライブラリのディレクトリ構成のせい
lib/hogehoge.rbでincludeしている lib/hoge/fuga.rbに、消してしまった定数はありました。lib/hoge.rbが存在していないのにlib/hoge/fuga.rbがあるとautoloadがうまくいかず、このような現象がおこる?模様。詳しく調べてまた追記します。