修正されたファイルがピンポイントで再読み込みされると思っていたのですが、autoload_paths
以下のファイルやconfig/routes.rb
等が修正された場合は全て再読み込みになるようです。非常にざっくりとした流れは以下の通り。
まずリクエストを受けるとreload_dependencies?
でautoload_paths
以下のファイル等が更新されているかチェック。
railties/lib/rails/application/default_middleware_stack.rb
def reload_dependencies?
config.reload_classes_only_on_change != true || app.reloaders.map(&:updated?).any?
end
更新されているとこちらのコールバックが呼ばれます。
railties/lib/rails/application/finisher.rb
callback = lambda do
ActiveSupport::DescendantsTracker.clear
ActiveSupport::Dependencies.clear
end
ActiveSupport::Dependencies.clear
以下自動読み込みされた定数がremove_const
で全て削除され、その後リクエストを処理する過程で改めてconst_missing
からファイルが再読み込みされます。