【问题标题】:Logs don't flush in Rails 5日志不会在 Rails 5 中刷新
【发布时间】:2020-02-20 21:31:39
【问题描述】:

我们有一个在 Heroku 上运行的 Rails 5 应用程序。当我们尝试使用heroku run:detached 运行进程时,日志不会出现,直到进程退出。一个例子:

$ heroku run:detached 'rails runner "Rails.logger.info 1;(1..500000000).each{};"'
Running rails runner "Rails.logger.info 1;(1..500000000).each{};" on ⬢ <REDACTED>... done, run.7268 (Standard-1X)
Run heroku logs --app <REDACTED> --dyno run.7268 to view the output.
$ heroku logs --dyno run.7268 -t
2019-10-24T13:49:29.846280+00:00 heroku[run.7268]: Starting process with command `rails runner "Rails.logger.info 1;(1..500000000).each{};"`
2019-10-24T13:49:30.582293+00:00 heroku[run.7268]: State changed from starting to up
2019-10-24T13:50:01.002636+00:00 heroku[run.7268]: State changed from up to complete
2019-10-24T13:50:00.982354+00:00 heroku[run.7268]: Process exited with status 0
2019-10-24T13:50:00.930084+00:00 app[run.7268]: I, [2019-10-24T13:49:35.871352 #4]  INFO -- : 1

在进程退出之前不会出现日志。可以看到最后一行的 Rails 时间戳是13:49:35,而日志时间戳是13:50:00。我们在 Rails 6 应用程序中看到了相同的行为,但在 Rails 4 应用程序中没有。

【问题讨论】:

    标签: ruby-on-rails heroku logging ruby-on-rails-5


    【解决方案1】:

    我们发现这是因为在生产模式下启用的 Rails 记录器中的缓冲。您可以在 production.rb 文件中使用 STDOUT.sync = true 禁用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 2013-09-17
      相关资源
      最近更新 更多