【问题标题】:oink logs command not working on herokuoink logs 命令在heroku上不起作用
【发布时间】:2013-01-26 06:24:41
【问题描述】:

我最近开始在我的 heroku 应用程序上使用 oink gem,因为我注意到一些控制器操作存在少量内存泄漏。 oink logs 命令在本地运行良好,但我不知道如何让它在我的生产站点上运行。

这是我正在尝试的命令:

heroku run oink /log/*

这是我的production.rb 文件中的一行:

config.middleware.use( Oink::Middleware, :logger => Rails.logger )

在我的本地安装中,oink 将日志存储在 /log/oink.log 文件中。

【问题讨论】:

    标签: ruby-on-rails memory-leaks


    【解决方案1】:

    这是答案: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(rsyslog 在另一个 *nix box 上)。

    使用带有 --threshold=0 的 oink 来显示所有条目

    【讨论】:

      【解决方案2】:

      以下是 Heroku 支持的回复:

      “在大多数情况下,在本地使用 Oink 足以理解内存使用问题。Heroku 的文件系统是短暂的,每个 dyno 都有自己独立的文件系统,因此写入和获取文件不是很实用。如果你可以配置 Oink 来写入到 stdout 或您的 Rails 记录器,它的消息应该显示在您的 Heroku 日志中,您可以使用 log drain 或像 Papertrail 这样的日志归档插件来获取它们的本地副本。"

      所以听起来他们建议在开发中使用它。或者,如果您可以写入标准输出,然后将它们自己记录为正确的格式。

      我无法在短时间内弄清楚,所以我最终使用 heroku-api gem 每隔几个小时从 cron 作业自动重启应用服务器。这是一个临时修复。

      【讨论】:

        【解决方案3】:

        试试

        heroku run bundle exec oink log/*
        

        【讨论】:

        • 技术更正:heroku run bundle exec oink log/\*,否则 splat 会在本地解释,这会导致本地日志文件的路径传递给 heroku。也就是说,这个命令似乎仍然不起作用,因为 Heroku 实际上并没有将日志文件存储在磁盘上。
        【解决方案4】:

        要分析您的生产日志,您需要运行

        heroku run bundle exec oink log/production.log
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-30
          相关资源
          最近更新 更多