首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zeitwerk不是rails 7中的自动加载模型

Zeitwerk不是rails 7中的自动加载模型
EN

Stack Overflow用户
提问于 2022-09-17 10:57:32
回答 1查看 258关注 0票数 1

最近,我将我的应用程序的Rails版本从6.1升级到了7,我面临着一个与zeitwerk有关的问题。我还在我的rails 6.1中使用了zeitwerk,它工作得很好,但是当我将它升级到rails 7时,突然有东西坏了。

因为zeitwerk会自动加载根目录,所以它也必须自动加载模型。但是现在,当我在启动服务器时尝试初始化一个模型时,我得到的是uninitialized constant错误。

代码语言:javascript
复制
>> "user".camelize.constantize
=> `constantize': uninitialized constant User

我还检查了这个ActiveSupport::Dependencies.autoload_paths,它包含了路径"app/models",但是它仍然给出了uninitialized constant错误,我不知道为什么。

但是,我尝试将以下行添加到我的applicatio.rb文件中

代码语言:javascript
复制
config.autoload_once_paths << "app/models"

然后,它给了我一个错误,说zeitwerk两次加载同一个目录,然后我不得不在config/initializers/zeitwerk.rb文件中添加这一行以使它工作。

代码语言:javascript
复制
Rails.autoloaders.main.ignore("app/models")

起初,它似乎修复了这个问题,但后来它导致了多个测试失败。所以,我的问题是,为了使它在rails 7中工作,我需要在我的application.rb文件中添加一些东西吗?

下面是我的application.rb文件的快照,如果这有帮助的话。

代码语言:javascript
复制
class Application < Rails::Application
    config.load_defaults 7.0
    config.autoload_once_paths << "app/models"
    config.active_record.pluralize_table_names = false
    config.assets.enabled = false
    config.api_only = true
    config.version = Dir.pwd.split('/').last
    config.action_dispatch.ip_spoofing_check = false
  end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 07:04:26

这与配置无关。请不要更改config.autoload_once_paths或任何自动显示配置。

正如在升级指南中所解释的,在Rails 7中,应用程序启动时不能自动加载常量。Rails 6上的应用程序已经发出了有关这方面的警告,并提供了有关如何解决这些问题的说明。

请按照升级指南中的说明进行修复。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73754260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档