我最近开始在我的heroku应用程序上使用oink gem,因为我发现一些控制器操作会导致内存泄漏。 oink logs命令在本地工作正常但我无法弄清楚命令让它在我的生产站点上工作。
这是我正在尝试的命令:
heroku run oink /log/*
这是我production.rb
文件中的一行:
config.middleware.use( Oink::Middleware, :logger => Rails.logger )
在我的本地安装中,oink将日志存储在/log/oink.log
文件中。
答案 0 :(得分:2)
以下是答案:https://stackoverflow.com/a/14145299/1684322
使用Hodel3000CompliantLogger而不是Rails.logger非常重要,否则oink将无法解析日志文件。它也可能不在config / environments / production.rb中配置,例如在config / initializers / oink.rb中
YourApplication::Application.middleware.use( Oink::Middleware, :logger => Hodel3000CompliantLogger.new(STDOUT), :instruments => :memory)
这将使Oink写入默认日志文件,稍后可能会被
捕获heroku logs -n500 --app app_name > logfile_for_oink
或使用其他日志管理工具,如PaperTrail,或设置syslog drain(另一个* nix框上的rsyslog)。
使用oink with --threshold = 0显示所有条目
答案 1 :(得分:1)
以下是Heroku支持的回复:
“在大多数情况下,在本地使用Oink足以理解内存使用问题.Heroku的文件系统是短暂的,每个dyno都有自己独立的文件系统,因此编写和获取文件不太实际。如果你可以配置Oink来编写对于stdout或你的rails记录器,它的消息应显示在你的Heroku日志中,你可以使用log drain或日志归档插件,如Papertrail来获取它们的本地副本。“
所以听起来他们建议在开发中使用它。或者,如果您可以写入stdout,然后将其自己排入正确的格式。
我无法在短时间内弄明白,所以我最终使用heroku-api
gem从cron作业每隔几个小时自动重启app服务器。这可以作为临时修复。
答案 2 :(得分:-1)
尝试
heroku run bundle exec oink log/*
答案 3 :(得分:-1)
要分析您需要运行的生产日志
heroku run bundle exec oink log/production.log