gpt4 book ai didi

ruby-on-rails - Rails 更新到 6.0.1 : errors when the config. load_defaults 已更改

转载 作者:行者123 更新时间:2023-12-02 03:04:50 25 4
gpt4 key购买 nike

我目前正在将 Rails 应用程序从 5.2.4 更新到 6.0.1。我使用了 Rails app:update 任务,修复了一些折旧,然后一一取消注释了 new_framework_defaults_6_0.rb 中的更改。一切正常,所有测试都经过验证,因此我删除了 new_framework_defaults_6_0.rb 文件并更改配置以加载新的默认值,使用 config.load_defaults 6.0 和... badaboum .

我能够启动 Rails 服务器,但 Puma 出现错误:

Puma caught this error: uninitialized constant Admin (call 'Admin.connection' to establish a connection)::Concerns
Did you mean? Concurrent (NameError)
/Users/xx/xx/app/models/admin.rb:4:in `<class:Admin>'
/Users/xx/xx/app/models/admin.rb:3:in `<top (required)>'
/Users/xx/.rvm/gems/ruby-2.6.5@xx/gems/zeitwerk-2.2.2/lib/zeitwerk/kernel.rb:16:in `require'
/Users/xx/.rvm/gems/ruby-2.6.5@xx/gems/zeitwerk-2.2.2/lib/zeitwerk/kernel.rb:16:in `require'
...

如果刷新,则会出现另一个错误:

Before process_action callback :authenticate_user has not been defined

(该方法存在)

最后,如果我再次刷新:

undefined method `signed_in?' for #<#<Class:0x00007fc47a7706f0>:0x00007fc47a783a70>

这些方法存在于我的代码中,而不是 Gem 中。就像某些文件未加载一样。我不知道问题是什么,config.load_defaults 6.0 与存在 new_framework_defaults_6_0.rb 时执行相同的操作,那么为什么它适用于该文件而不适用于config.load_defaults 6.0

任何帮助将不胜感激

ruby 2.6.5Rails 6.0.1

最佳答案

好吧,解决方案非常简单,我没有注意到自动加载器是一个新的...Rails 在 Rails 6.0 中默认使用 zeitwerk 自动加载器:

def load_defaults(target_version)
case target_version.to_s
when "5.0"
[…]
when "5.2"
load_defaults "5.1"
[…]
when "6.0"
load_defaults "5.2"

self.autoloader = :zeitwerk if RUBY_ENGINE == "ruby"

[…]
else
raise "Unknown version #{target_version.to_s.inspect}"
end

@loaded_config_version = target_version
end

还有一个选择自动加载器的方法:

def autoloader=(autoloader)
case autoloader
when :classic
@autoloader = autoloader
when :zeitwerk
require "zeitwerk"
@autoloader = autoloader
else
raise ArgumentError, "config.autoloader may be :classic or :zeitwerk, got #{autoloader.inspect} instead"
end
end

所以我刚刚更改了 application.rb 以使用经典自动加载器:

config.load_defaults 6.0
config.autoloader = :classic

现在一切正常

关于ruby-on-rails - Rails 更新到 6.0.1 : errors when the config. load_defaults 已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59270752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com