我最近将我的应用程序的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
1条答案
按热度按时间hjzp0vay1#
这与配置无关。请勿更改
config.autoload_once_paths
或任何自动加载配置。正如升级指南中所解释的,在Rails7中,当应用程序引导时,您不能自动加载常量。您在Rails6上的应用程序已经发布了有关此问题的警告以及如何解决这些问题的说明。
请按照升级指南中的说明进行修复。