如何解决Zeitwerk“弃用警告:初始化自动加载常量”是由在 lib 文件夹中包含一个模块引起的
DEPRECATION WARNING: Initialization autoloaded the constants AuthHelper,SemanticFormHelper,ActionText::ContentHelper,and ActionText::TagHelper
自从升级到 Rails 6 以来,我一直收到有关新 Zeitwerk 自动加载器的警告。
这通常是由在 config/initializers
文件夹中加载常量引起的,但此处并非如此。
AuthHelper
和 SemanticFormHelper
被我的 lib
文件夹中的这两个文件拉入:
module AuthorizationSystem
include AuthHelper
...
end
module SemanticFormBuilder
include SemanticFormHelper
...
end
初始化时,lib
文件夹中的所有文件都会运行,并且这些文件中包含的任何内容都会触发 DEPRECATION WARNING
。
如果我删除 include
语句,警告就会消失,但应用程序会在某些页面上中断,因为包含是必需的。
如何在我的 include
文件夹中的文件中包含 lib
语句而不引起警告?
ActionText::ContentHelper
和 ActionText::TagHelper
在我的应用程序中找不到,所以我想这些警告来自我正在使用的 gem。任何有关如何调试的想法也将不胜感激。
解决方法
要定位警告的来源,您可以使用以下代码,放置在 application.rb
中,Bundler.require
之前。
ActiveSupport.on_load(:action_controller_base) do
bc = ActiveSupport::BacktraceCleaner.new
bc.remove_silencers!
bc.add_silencer { |line| line.start_with?(RbConfig::CONFIG["rubylibdir"]) }
bc.add_silencer { |line| line =~ Regexp.union(
*(
%w{ bootsnap railties spring activesupport actionpack zeitwerk thor rack }.
map{|g| /\A#{g} \([\w.]+\) /}
),/\Abin\/rails/
)}
trace = bc.clean(caller)
puts "Cleaned backtrace:\n\t#{trace.join("\n\t")}\n"
puts "Most probably the cause is: #{trace.first}"
puts "If not - uncomment `raise` at #{__FILE__}:#{__LINE__+1}"
# raise "i can haz full backtrace"
exit(1)
end
(来自GitHub)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。