我将这些代码行用作工厂来创建对象:
class ServiceProcessor
def self.create(service, logger)
classified_name = service.name.to_s.split('_').collect! { |w| w }.join << "Processor"
logger.warn "Creating service proc, classified name: #{classified_name}"
service_proc = Object.const_get(classified_name).new
... check respond_to etc.
return service_proc
第一行可能是奇数,需要重构。我可以使用这些行来创建各种处理器:
class AlphaProcessor < ServiceProcessor
class BetaProcessor < ServiceProcessor
etc...
因此可以在我的规范和控制台中创建这些处理器。它们也可以用rake创建 - 但只有一些。其中两个失败了:
WARN 2012-01-27 08:54:18 -0800 (25626) Creating service proc,
classified name: AlphaProcessor
ERROR 2012-01-27 08:54:18 -0800 (25626)
Failed for service #<Service _id: 4f203c171d41c83b3b000003, _type: nil,
deleted_at: nil, name: "Alpha", enabled: true>
ERROR 2012-01-27 08:54:18
-0800 (25626) Exception: uninitialized constant AlphaProcessor ERROR
2012-01-27 08:54:18 -0800 (25626) Backtrace:
["/mnt/hgfs/kodiak/lib/service_processors/_service_processor.rb:33:in
`const_get'",
"/mnt/hgfs/kodiak/lib/service_processors/_service_processor.rb:33:in
`create'", "/mnt/hgfs/kodiak/lib/update_engine.rb:28:in `block in
update_all'",
所以问题是,我应该怎样去弄清楚为什么这两个(9个中的)会失败,但只能在Rake中?我可以看到Rake和控制台正在加载相同的环境(environment.rb中的一些puts
),所以我怀疑是这样。我对可能造成这种情况或在哪里寻找的东西感到难过。
答案 0 :(得分:0)
您是否尝试在rake文件的顶部添加内核#require以加载正确的类?另外,你如何定义rake任务?我已经能够做到这一点来拉入我的类常量:
task :my_task => :environment do
...
end
另外,请检查您的文件名。确保名为“AlphaBravoTangoProcessor”的类位于名为“alpha_bravo_tango_processor.rb”的文件中,不是名为“alphabravotango_processor.rb”的文件。