如何解决Object.const_get在rake中失败而不是在控制台中失败?

时间:2012-01-27 17:15:34

标签: ruby rake

我将这些代码行用作工厂来创建对象:

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),所以我怀疑是这样。我对可能造成这种情况或在哪里寻找的东西感到难过。

1 个答案:

答案 0 :(得分:0)

您是否尝试在rake文件的顶部添加内核#require以加载正确的类?另外,你如何定义rake任务?我已经能够做到这一点来拉入我的类常量:

task :my_task => :environment do
  ...
end

另外,请检查您的文件名。确保名为“AlphaBravoTangoProcessor”的类位于名为“alpha_bravo_tango_processor.rb”的文件中,不是名为“alphabravotango_processor.rb”的文件。