Как устранить неисправность Object.const_get в грабли, но не в консоли? - PullRequest
0 голосов
/ 27 января 2012

У меня есть следующие строки кода, которые я использую в качестве Фабрики для создания объектов:

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...

Таким образом, эти процессоры могут быть созданы в моих спецификациях и через консоль.Они также могут быть созданы в граблях - но только некоторые из них.Два из них терпят неудачу:

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? Iвидно, что Rake и консоль загружают одну и ту же среду (несколько puts в environment.rb), поэтому я сомневаюсь, что это так.Я озадачен тем, что может быть причиной этого или где искать.

1 Ответ

0 голосов
/ 27 января 2012

Вы пытались добавить Kernel # require в начало вашего файла rake, чтобы загрузить нужные классы?Кроме того, как вы определяете грабли?Я смог сделать это для получения констант моего класса:

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

Кроме того, проверьте ваши имена файлов.Убедитесь, что класс с именем «AlphaBravoTangoProcessor» находится в файле с именем «alpha_bravo_tango_processor.rb», не в файле с именем «alphabravotango_processor.rb».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...