我有一个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遇到错误并失败时。 它无声地失败了。 有没有办法知道错误是否已经发生并可能得到错误日志?
答案 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
确保在这种情况下,在异常处理后静默地执行操作