gpt4 book ai didi

ruby-on-rails - Rails 6:Zeitwerk::NameError 不从模块加载类

转载 作者:行者123 更新时间:2023-12-03 13:44:58 25 4
gpt4 key购买 nike

我有一个看起来像这样的文件

#app/services/account/authenticate/base.rb
module Account
module Authenticate
AuthenticateError = Class.new(StandardError)

class Base < ::Account::Base
def self.call(*attrs)
raise NotImplementedError
end
end
end
end

现在我将从 rails c 运行代码我有一个错误
> ::Account::Authenticate::AuthenticateError
=> NameError (uninitialized constant Account::Authenticate::AuthenticateError)
> ::Account::Authenticate.constants
=> [:Base, :ViaToken]

所以 rails 看不到 AuthenticateError 类。但是当我从这个文件夹创建一个嵌套类时
=> Account::Authenticate::ViaToken
> ::Account::Authenticate.constants
=> [:Base, :AuthenticateError, :ViaToken]

AuthenticateError 类现在可见
> ::Account::Authenticate::AuthenticateError
=> Account::Authenticate::AuthenticateError

这个问题的解决方案是创建一个单独的文件 authenticate_error.rb 它将从一开始就起作用,但这个解决方案对我来说并不理想。有没有预加载所有类或smth的解决方案?

(Ruby 2.6 与 Rails 6.0.0.rc2)

最佳答案

在将 Rails 6.0.2 应用程序部署到 Ubuntu 18.04 服务器时,我遇到了同样的问题。

Unable to load application: Zeitwerk::NameError: expected file /home/deploy/myapp/app/models/concerns/designation.rb to define constant Designation, but didn't



我发现问题出在 时代周刊 . Zeitwerk 是 Rails 6 中使用的新代码加载器引擎。它旨在成为所有 Rails 6+ 项目的新默认值,取代旧的 经典引擎。 Zeitwerk 提供了代码自动加载、急切加载和重新加载的功能。

这是我解决它的方法 :

导航到 config/application.rb文件在你的项目上。

在您的应用程序模块中添加此行以切换到 classic自动加载模式:
config.autoloader = :classic

这是一个例子:
module MyApp
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 6.0

# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
# the framework and any gems in your application.

config.autoloader = :classic
end
end

您可以在 上阅读更多信息时代周刊在这篇文章中: Understanding Zeitwerk in Rails 6

就这样。

我希望这会有所帮助

关于ruby-on-rails - Rails 6:Zeitwerk::NameError 不从模块加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57277351/

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