Chi*_*fic 13 ruby-on-rails ruby-on-rails-6 zeitwerk
我发誓我已经阅读了文档,并且我认为我对这些原理有了基本的了解,但是我一生都无法弄清楚我在哪里不恰当地加载了这些常量。
我正在升级一个最初是 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.
Run Code Online (Sandbox Code Playgroud)
以下是不正确自动加载的常量:
我寻找过可能调用这些常量的实例include,require但没有找到。我特别关注我的初始化程序。
我已经运行(并通读)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
Run Code Online (Sandbox Code Playgroud)
我正在使用 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
...
Run Code Online (Sandbox Code Playgroud)
我还应该去哪里看看有什么想法吗?
Chi*_*fic 12
事实证明这似乎与rails_admin.
其他人也分享了我对警告消息的沮丧,并请求更多帮助来追踪问题。
一项响应建议将其放在pp caller_locations正在自动加载的文件之一的顶部。这样做给了我一个可以使用的回溯。就在那时,我注意到这rails_admin在每一个中都以一条路径的形式出现。
我注意到我已经有一个巨大的require声明列表config/initializers/rails_admin.rb:
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'
Run Code Online (Sandbox Code Playgroud)
为了好玩,我将它们全部注释掉,然后运行 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.
Run Code Online (Sandbox Code Playgroud)
所以我决定在之前的实例中添加:
require 'application_helper'
require 'events_helper'
require 'devise_helper'
require 'error_handler'
require 'application_controller'
Run Code Online (Sandbox Code Playgroud)
...到我已经很长的清单,我的警告信息,所有这些都FontAwesome::Rails::IconHelper消失了。我想如果我能找出正确的文件路径,我也能得到这个。