音楽とRubyと日常

DDD ディストーション駆動開発

July 02, 2016

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がうまくいかず、このような現象がおこる?模様。詳しく調べてまた追記します。