Rails rake任务调用错误捕获

时间:2015-02-25 11:04:14

标签: ruby-on-rails rake

我有一个rails代码段,可以从模型中执行rake文件。

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

它可以工作,但是当rake遇到错误并失败时。 它无声地失败了。 有没有办法知道错误是否已经发生并可能得到错误日志?

1 个答案:

答案 0 :(得分:1)

使用rescue来捕获和处理错误

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

确保在这种情况下,在异常处理后静默地执行操作