【问题标题】:Rails 5 - Is there a way to log cache misses?Rails 5 - 有没有办法记录缓存未命中?
【发布时间】:2018-09-12 01:45:19
【问题描述】:

尝试调试缓存未命中的原因。在 config/environments/production.rb 中,我们将资产回退为 true:

config.assets.compile = true

每隔一段时间,我们就会看到 CPU 激增,罪魁祸首是 nodejs,我们认为它是由于这条线而被解雇的(当出现失误时它正在编译资产)。当资产丢失时,有没有办法记录到生产日志或它自己的日志中,这样我们就可以弄清楚为什么它没有被添加到预编译轨迹中?

感谢您的帮助, 凯文

【问题讨论】:

  • 如果资产是预编译的,它应该由您的网络服务器(nginx、apache 等)交付,如果 rails 必须编译它,那么它应该出现在生产日志中。但是您将缓存与预编译混合在一起,这是不同的事情。建议在生产环境中禁用资产编译,如果某些资产未预编译,则网络服务器将响应未找到状态代码(它将出现在网络服务器错误日志中)。
  • 这是我凭经验知道的。如果我将该配置标志设置为 false,则在丢失资产时会得到 500。如果我把它变成真的,我偶尔会得到一些巨大的 nodejs 进程。我相信正在发生的事情是 100% 的资产没有被预编译,触发未命中,触发 nodejs 重新编译。我最初的问题是,我如何检测这种错过何时发生?
  • 这个问题应该改写成“有没有办法记录预编译未命中”?
  • 请求错误记录在 Web 服务器错误日志中(nginx?apache?如果您不知道错误日志在哪里,请检查您网站的站点启用配置)

标签: ruby-on-rails asset-pipeline


【解决方案1】:

您提到的指令用于资产编译,而不是缓存。用于缓存的 config.rb 指令是 (https://guides.rubyonrails.org/caching_with_rails.html)

config.action_controller.perform_caching = true|false

这不会影响静态资产的缓存,例如图片、javascript 文件或样式表。为此,您需要查看您的 Web 服务器设置,并了解为什么您的静态资产没有被正确缓存。您表示您偶尔会出现峰值。尖峰是否始终间隔开?如果是这样,那么可能只是您的缓存生存时间设置得太低,您需要提高它。您是否在部署后立即看到峰值?如果是这样,您的资产可能未在该环境中进行预编译。您甚至可能同时遇到这两个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-17
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多