ruby-on-rails - Rails 自动加载嵌套类:LoadError(无法自动加载常量 ModuleName::ClassName)
问题描述
我app/services
用来组织服务类的集合。例如,我对app/services/metrics/transaction.rb
.
出于某种原因,Rails 自动加载很难做到这一点。我会收到不断的加载错误,例如:
LoadError (Unable to autoload constant Metrics::Transaction, expected /Users/home/company/repo-name/app/services/metrics/transaction.rb to define it)
当然,文件(和它的 3 个同级文件)是在列出的位置定义的。在急切加载常量的生产环境中,这不是问题。
路径在下面app
,我检查了自动加载路径,因此应该加载文件,但是每当第一次命中常量时,我都会遇到这个问题。
解决方案
这里的关键似乎是常量是嵌套的。似乎常量加载器首先尝试加载模块Metrics
并且未能找到,发出错误。
如果您在app/services
(或任何相应的app/*
自动加载目录)中创建一个定义模块常量的文件:
# app/services/metrics.rb
module Metrics
end
那么自动加载器将能够干净地加载app/services/metrics/*
.
推荐阅读
- javascript - shadow DOM 不显示内容。如何使内容在 DOM 中可见?
- c++ - 如何从(通常)返回引用(对成员数据)的成员函数返回常量
- php - Solorium 问题 - 语法错误,意外 ':',期待 ';' 或 '{' 在第 309 行
- c# - 关闭 VSTO 应用程序后的 System.AppDomainUnloadedException
- matlab - 灵活的结构名称,无需开关
- python - 关于linux中的串口
- wordpress - 在 .htaccess 中打开 TRACK/TRACE/OPTIONS 选项时,浏览网站根目录失败
- python - 使用 Python 将 .arff 文件转换为 .csv
- batch-file - 如何使用批处理文件向 Windows 主机添加新行
- linux - 有没有办法检查和清理 ASP.NET Core 应用程序的证书吊销列表缓存,该应用程序是 dockerized 并在 Linux 下运行?