2015-02-25 2 views
0

У меня есть фрагмент кода rails, который делает файл рейка из модели.Rails rake task invoke error catching

Rake.application.rake_require '../../lib/tasks/master_load' 
fork do 
    results = capture_stdout {Rake.application['db:seed:excel:to_yaml'].invoke} 
end 

capture_stdout для распечатки журналов

def self.capture_stdout 
    s = StringIO.new 
    oldstdout = $stdout 
    $stdout = s 
    yield 
    s.string 
    Rails.logger.info "#{s.string}" 
    ensure 
    $stdout = oldstdout 
end 

это работает, но когда реки встречают ошибку и выходят из строя. он терпит неудачу. Есть ли способ узнать, произошла ли ошибка и, возможно, получить журнал ошибок?

ответ

1

Используйте спасение, чтобы перехватывать и обрабатывать ошибки

def self.capture_stdout 
    s = StringIO.new 
    oldstdout = $stdout 
    $stdout = s 
    yield 
    s.string 
    Rails.logger.info "#{s.string}" 
    rescue Exception => e 
    # handle e - exception object 
    ensure 
    $stdout = oldstdout 
    end 

Убедитесь в этом случае молча делает действие после того, как обработка исключений