2

当我将 Rails 应用程序上传到 Heroku 时,使用 heroku 日志时出现错误

NoMethodError (undefined method `flush' for #<Logger:0x00000005501680>):
2012-12-20T16:20:42+00:00 app[web.1]:   app/controllers/application_controller.rb:19:in `block in <class:ApplicationController>'

这是因为

 rescue_from 'Exception' do |ex|
    Rails.logger.fatal formatted_exception(ex)
    Rails.logger.flush

ApplicationController.

我如何解决它?

4

1 回答 1

4

Flush 是定义在 IO 上的方法,它将缓冲的输出刷新到管道。

鉴于 Heroku 的多环境设置,他们可能有自己的 IO 管道实现,可能没有定义刷新。如果 Flush 没有被定义,那么你不需要它是一个相当安全的赌注,它会在接收到输入时自动刷新。

怎么样

rescue_from 'Exception' do |ex|
  Rails.logger.fatal formatted_exception(ex)
  Rails.logger.flush if Rails.logger.respond_to? :flush

附言

您可能不应该挽救 Exception:为什么在 Ruby 中 `rescue Exception => e` 是一种不好的风格?

于 2012-12-20T17:17:25.967 回答