Zeitwerk不能在Rails 7中自动加载模型

tcbh2hod  于 2022-09-21  发布在  Ruby
关注(0)|答案(1)|浏览(290)

我最近将我的应用程序的Rails版本从6.1升级到7,我面临着zeitwerk的一个问题。我也在我的rails 6.1中使用zeitwerk,它工作得很好,但当我将其升级到rails 7时,突然出现了一些问题。

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

>> "user".camelize.constantize
=> `constantize': uninitialized constant User

我还检查了这个ActiveSupport::Dependencies.autoload_paths,它包含路径"app/models",但它仍然显示uninitialized constant错误,我不确定原因。

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

config.autoload_once_paths << "app/models"

然后它给我一个错误,说zeitwerk正在加载同一目录两次,然后我必须在config/initializers/zeitwerk.rb文件中添加以下行才能使其工作。

Rails.autoloaders.main.ignore("app/models")

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

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

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
hjzp0vay

hjzp0vay1#

这与配置无关。请勿更改config.autoload_once_paths或任何自动加载配置。

正如升级指南中所解释的,在Rails7中,当应用程序引导时,您不能自动加载常量。您在Rails6上的应用程序已经发布了有关此问题的警告以及如何解决这些问题的说明。

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

相关问题