h3pei.tech
お仕事のご依頼
2018-04-15

【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 に自動的に属するので、デフォルトのディレクトリとする必要はない。

https://railsguides.jp/autoloading_and_reloading_constants.html#autoload-paths

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

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

bin/spring stop

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

h3pei's icon

h3pei

フリーランスのソフトウェアエンジニア。Ruby / Rails アプリケーションの開発が得意領域。設計・実装・運用まで含めてプロダクト開発が好きです。

Questalという目標達成コミュニティサービスを開発しました。仲間と一緒に目標達成に取り組みたい方はぜひご利用ください。

お仕事のご依頼
GitHubnoteX

関連記事