MogLog

メモというか日記というか備忘録というか

【Rails】app/以下に新規作成したディレクトリのファイルが読み込まれない件

結論:springの再起動が必要だった

あらまし

Ruby On Railsアプリケーションの開発中、app/以下に新しくvalidatorsというディレクトリを作ることになった。 最近のRailsではapp以下のファイルを自動で読み込んでくれるようになっているので、追加の設定は不要だ。

Railsガイドにも次のように書かれている。

ところで、Railsにはpost.rbのようなファイルを探索する$LOAD_PATHに似た、ディレクトリのコレクションがあります。このコレクションはautoload_pathsと呼ばれており、デフォルトで以下が含まれます。

アプリケーションとエンジンのappディレクトリ以下にあるすべてのサブディレクトリ。app/controllersなどが対象。app以下に置かれるapp/workersなどのカスタムディレクトリはすべてautoload_pathsに自動的に属するので、デフォルトのディレクトリとする必要はない。

定数の自動読み込みと再読み込み | Rails ガイド

そう、そのはずなのだが何故か読み込まれない。 bin/rails cでコンソールを立ち上げて、$LOAD_PATHActiveSupport::Dependencies.autoload_pathsを確認してもやはりapp/validatorsは含まれていない。

1時間くらいハマッて調べた結果、springがキャッシュを持っていることが原因だとわかった。

$ bin/spring stop

上のコマンドでspringを停止し、その後 bin/rails c でコンソールを立ち上げて確認したところ無事に読み込まれていた。 springは裏でひっそりと動くのであまり気にしなくて良い反面、存在自体を忘れがちである。