Railsのコントローラーやモデル、ビューなどを修正をして、ブラウザで再度アクセスしても変更が反映されない時があります。
これはRailsのキャッシュが働いているためです。
理由は分かりませんが、M1 Macでのdocker環境では、このような問題が発生せず、Windowsで構築した環境で発生しました。
解決方法
方法①:コンテナを再起動する
docker、もしくはrailsを再起動します。
docker-compose restart
rails restart
方法②:キャッシュをオフにする
「config/environments/development.rb」の設定で、キャッシュをオフにします。
config.cache_classes = false
config.reload_classes_only_on_change = false
config.file_watcher = ActiveSupport::FileUpdateChecker
サーバーへのリクエストごとにクリアされない定数を自動読み込みするパスの配列を渡せます。この設定はconfig.cache_classesがfalse(developmentモードのデフォルト値)の場合に関連しています。それ以外の場合、自動読み込みは1度しか行われません。この配列内にあるすべての要素はautoload_pathsに存在しなければなりません。デフォルト値は空の配列です。
Rails アプリケーションを設定する:3.1.3 config.autoload_once_paths
監視しているファイルが変更された場合にのみクラスを再読み込みするかどうかを指定します。デフォルトでは、autoload_pathで指定されたすべてのファイルが監視対象となり、デフォルトでtrueが設定されます。config.cache_classesがtrueの場合、このオプションは無視されます。
Rails アプリケーションを設定する:3.1.30 config.reload_classes_only_on_change
config.reload_classes_only_on_changeがtrueの場合に、ファイルシステム上のファイル更新検出に使われるクラスを指定します。デフォルトのRailsではActiveSupport::FileUpdateChecker、およびActiveSupport::EventedFileUpdateChecker(これはlistenに依存します)が指定されます。カスタムクラスはこのActiveSupport::FileUpdateChecker APIに従わなければなりません。
Rails アプリケーションを設定する:3.1.20 config.file_watcher
コメント