最近,我将我的应用程序的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")起初,它似乎修复了这个问题,但后来它导致了多个测试失败。所以,我的问题是,为了使它在rails 7中工作,我需要在我的application.rb文件中添加一些东西吗?
下面是我的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发布于 2022-09-19 07:04:26
这与配置无关。请不要更改config.autoload_once_paths或任何自动显示配置。
正如在升级指南中所解释的,在Rails 7中,应用程序启动时不能自动加载常量。Rails 6上的应用程序已经发出了有关这方面的警告,并提供了有关如何解决这些问题的说明。
请按照升级指南中的说明进行修复。
https://stackoverflow.com/questions/73754260
复制相似问题