From cb1b24695ee60355a8a9ca9bf0fc865a3ed9cfe6 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Tue, 8 Nov 2022 10:07:29 +0100 Subject: [PATCH] Fix deprecation warnings around class loading during initialization ``` Fix deprecation warnings around class loading during initialization Thi2022-11-08T08:54:57.542Z pid=40093 tid=nl9 WARN: DEPRECATION WARNING: Initialization autoloaded the constants ReportsHelper, DateTimeStringValidator et IntegerArrayValidator. Being able to do this is deprecated. Autoloading during initialization is going to be an error condition in future versions of Rails. Reloading does not reboot the application, and therefore code executed during initialization does not run again. So, if you reload ReportsHelper, for example, the expected changes won't be reflected in that stale Module object. These autoloaded constants have been unloaded. In order to autoload safely at boot time, please wrap your code in a reloader callback this way: Rails.application.reloader.to_prepare do # Autoload classes and modules needed at boot time here. end That block runs when the application boots, and every time there is a reload. For historical reasons, it may run twice, so it has to be idempotent. Check the "Autoloading and Reloading Constants" guide to learn more about how Rails autoloads and reloads. ``` --- config/application.rb | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/config/application.rb b/config/application.rb index 392f8a142c..e0885da7d8 100644 --- a/config/application.rb +++ b/config/application.rb @@ -155,15 +155,17 @@ module Openfoodnetwork initializer "ofn.reports" do |app| module ::Reporting; end - loader = Zeitwerk::Loader.new - loader.push_dir("#{Rails.root}/lib/reporting", namespace: ::Reporting) - loader.enable_reloading - loader.setup - loader.eager_load + Rails.application.reloader.to_prepare do + loader = Zeitwerk::Loader.new + loader.push_dir("#{Rails.root}/lib/reporting", namespace: ::Reporting) + loader.enable_reloading + loader.setup + loader.eager_load - if Rails.env.development? - require 'listen' - Listen.to("lib/reporting") { loader.reload }.start + if Rails.env.development? + require 'listen' + Listen.to("lib/reporting") { loader.reload }.start + end end end @@ -247,5 +249,7 @@ module Openfoodnetwork config.active_storage.variable_content_types += ["image/svg+xml"] config.exceptions_app = self.routes + + config.autoloader = :zeitwerk end end