我发誓我读过文档,我认为我对原理有了基本的理解,但我一辈子都不能弄清楚我在哪里不恰当地加载了这些常数。
我正在升级一个最初是Rails5.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文件 *
我已经查找了可能调用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
我正在使用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
...
我还能去哪里看看
2条答案
按热度按时间nr7wwzry1#
这似乎与
rails_admin
有关。我是怎么知道的:
Someone else分享了我对警告消息的沮丧,并要求更多的帮助来跟踪这个问题。
One response建议将
pp caller_locations
放在正在自动加载的文件的顶部。这样做给了我一个可以使用的回溯。这时我注意到rails_admin
在每个文件中都显示为路径。我注意到在
config/initializers/rails_admin.rb
中已经有了一个巨大的require
语句列表:为了好玩,我把它们都注解掉了,然后运行了一个RSpec测试,我的警告消息突然变得超级长,包含了更多的示例:
所以我决定在我以前的例子中添加:
...我已经很长的列表,我的警告消息,所有的,但
FontAwesome::Rails::IconHelper
消失.我想我可以得到一个太,如果我能找出正确的文件路径.ctehm74n2#
有点晚了,但我发现这很有帮助。说你遇到了。
你所需要做的就是转到它被定义的地方,并导致编译器错误:
您现在应该能够找到需要它的地方。