我在模块中定义了probems自动加载类。有人可以指出我做错了吗?
application.rb中
config.autoload_paths += Dir["#{Rails.root}/lib/**/"]
LIB / metrics_module.rb
module MetricsModule
class Metrics
end
class BaseMetrics
end
end
LIB /度量/ server_metrics.rb
module MetricsModule
class ServerMetrics < BaseMetrics
end
end
我试图在我的代码中使用它
def new_s_to_s_metrics(platform_type)
return ServerMetrics.new(self, platform_type)
end
但是我出现了这个错误 - :
更新Mongo预计算数据时出错。错误是无法自动加载常量ServerMetrics,预期/webapps/tensile/lib/metrics/server_metrics.rb来定义它
更新
将文件移动到新文件夹metrics_module
后,发生了什么:我按照你说的做了,这就是我最终的地方
Error updating Mongo Precomputation Data. Error is Unable to autoload constant AfMetrics, expected
/webapps/adwyzeupstream/lib/metrics_module/af_metrics.rb to define it
/webapps/adwyzeupstream/lib/tasks/helper.rake:30:in `rescue in timed_task'
/webapps/adwyzeupstream/lib/tasks/helper.rake:37:in `timed_task'
/webapps/adwyzeupstream/lib/tasks/precomputation.rake:5:in `block (2 levels) in <top (required)>'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `eval'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `<main>'
LoadError: Unable to autoload constant AfMetrics, expected /webapps/adwyzeupstream/lib/metrics_module/af_metrics.rb to define it
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:495:in `load_missing_constant'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:184:in `const_missing'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:526:in `load_missing_constant'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:184:in `const_missing'
代码就像
LIB / metrics_module / af_metrics.rb
module MetricsModule
class AfMetrics < BaseMetrics
end
end
答案 0 :(得分:1)
要成功自动加载,该类将按照Rails约定位于具有名称的文件中。
<强> TL; DR 强>:
mkdir lib/metrics_module
mv lib/metrics/server_metrics.rb lib/metrics_module/server_metrics.rb
名称约定是:嵌套类'文件名将构造为top_module/nested_module/class_name.rb
,其中top_module
,nested_module
和class_name
是各个模块的蛇形名称/类。
在您的情况下,Rails会尝试从class Metrics::ServerMetrics
自动加载metrics/server_metrics.rb
并在[不存在] class MetricsModule::ServerMetrics
中查找metrics_module/server_metrics.rb
,因此会失败。