繁体   English   中英

Rails 6 Zeitwerk“弃用警告:初始化自动加载常量……”但我不知道在哪里?

[英]Rails 6 Zeitwerk “DEPRECATION WARNING: Initialization autoloaded the constants…” but I can't figure out where?

我发誓我已经阅读了这些文档,并且我认为我对这些原则有基本的了解,但我一生都无法弄清楚我在哪里不恰当地加载了这些常量。

我正在努力升级最初是 Rails 5.2 的应用程序

我在运行 RSpec、服务器、本地控制台等时收到此警告。

DEPRECATION WARNING: Initialization autoloaded the constants ApplicationHelper, EventsHelper, FontAwesome::Rails::IconHelper, DeviseHelper, ErrorHandler, and ApplicationController.

Being able to do this is deprecated. Autoloading during initialization is going
to be an error condition in future versions of Rails.

以下是不恰当地自动加载的常量:

  • ApplicationHelper - 标准 Rails 文件
  • EventsHelper - EventsController 的标准 Rails 文件
  • FontAwesome::Rails::IconHelper -来自 gem,不在我的应用程序目录中
  • DeviseHelper -来自 gem,不在我的应用程序目录中
  • ErrorHandler -位于 'app/controllers/concerns/error_handler'
  • ApplicationController -标准 Rails 文件

我已经查找了可能为这些常量调用includerequire的实例,但没有找到。 我特别关注我的初始化程序。

我已经运行(并通读) bin/rails zeitwerk:check没有任何明显的提示。 我看到这些实例按预期加载:

...
Zeitwerk@rails.main: constant ApplicationHelper loaded from file /Users/ckragt/ruby/filterbuildscheduler/app/helpers/application_helper.rb
...
Zeitwerk@rails.main: constant EventsHelper loaded from file /Users/ckragt/ruby/filterbuildscheduler/app/helpers/events_helper.rb
...
Zeitwerk@rails.main: constant FontAwesome::Rails::IconHelper loaded from file /Users/ckragt/.rvm/gems/ruby-2.7.0/gems/font-awesome-rails-4.7.0.7/app/helpers/font_awesome/rails/icon_helper.rb
...
Zeitwerk@rails.main: constant DeviseHelper loaded from file /Users/ckragt/.rvm/gems/ruby-2.7.0/gems/devise-4.7.3/app/helpers/devise_helper.rb
...
Zeitwerk@rails.main: constant ErrorHandler loaded from file /Users/ckragt/ruby/filterbuildscheduler/app/controllers/concerns/error_handler.rb
...
Zeitwerk@rails.main: autoload set for ApplicationController, to be loaded from /Users/ckragt/ruby/filterbuildscheduler/app/controllers/application_controller.rb

我正在使用 Spring 和 Binstub(都更新到最新版本)。

这是我的application.rb文件的顶部:

# frozen_string_literal: true

require_relative 'boot'
require 'csv'

require 'rails'
# Pick the frameworks you want:
require 'active_model/railtie'
require 'active_job/railtie'
require 'active_record/railtie'
# require "active_storage/engine"
require 'action_controller/railtie'
require 'action_mailer/railtie'
# require 'action_mailbox/engine'
# require 'action_text/engine'
require 'action_view/railtie'
# require 'action_cable/engine'
require 'sprockets/railtie'
# require 'rails/test_unit/railtie'

require 'google/apis/gmail_v1'
require 'google/api_client/client_secrets'

# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)

module BuildPlanner
  class Application < Rails::Application
    # Initialize configuration defaults for originally generated Rails version.
    config.load_defaults 6.0
...

关于我应该在哪里看的任何想法?

原来这似乎与rails_admin有关。

我是如何学会的:

其他人分享了我对警告消息的挫败感,并要求提供更多帮助来追踪问题。

一种响应建议将pp caller_locations放在正在自动加载的文件之一的顶部。 这样做给了我可以使用的回溯。 那时我注意到rails_admin在每个路径中都显示为路径。

我注意到我已经在config/initializers/rails_admin.rb中有大量的require语句:

require 'money-rails/rails_admin'
require 'rails_admin/adapters/active_record'
require 'application_record'
require 'user'
require 'event'
require 'registration'
require 'location'
require 'technology'
require 'supplier'
require 'component'
require 'part'
require 'material'
require 'count'
require 'inventory'
require 'extrapolate_component_part'
require 'extrapolate_material_part'
require 'extrapolate_technology_component'
require 'extrapolate_technology_part'
require 'extrapolate_technology_material'

为了好玩,我将它们全部注释掉,然后运行了 RSpec 测试。 我的警告信息突然变得超级长,还有更多实例:

DEPRECATION WARNING: Initialization autoloaded the constants ApplicationHelper, EventsHelper, FontAwesome::Rails::IconHelper, DeviseHelper, ErrorHandler, ApplicationController, ApplicationRecord, User, Event, Registration, Location, Technology, Component, Part, Material, Supplier, Count, Inventory, ExtrapolateComponentPart, ExtrapolateMaterialPart, ExtrapolateTechnologyComponent, ExtrapolateTechnologyPart, and ExtrapolateTechnologyMaterial.

所以我决定在我之前的实例中添加:

require 'application_helper'
require 'events_helper'
require 'devise_helper'
require 'error_handler'
require 'application_controller'

...在我已经很长的列表中,我的警告信息,除了FontAwesome::Rails::IconHelper之外的所有信息都消失了。 我想我也可以得到那个,如果我能找出正确的文件路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM