我们有一个在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应用程序中却没有。
答案 0 :(得分:0)
我们发现这是由于在生产模式下启用的Rails logger中的缓冲。您可以使用STDOUT.sync = true
文件中的production.rb
禁用它。