0

我想弄清楚如何在我的Rails development.log中清除非常分散注意的Cache read: http://localhost:3000/assets/...语句,这会使我拖慢所有滚动条导致我做(我在Rails 3.2上)。在Rails development.log中为我的所有资产沉默“缓存读取”语句

在我的开发日志中,SQL语句之后,以及对缓存片段(它仍然有用并且我想保留)的读取/写入中,有一长串缓存读取语句用于所有js,css ,以及在请求的页面上使用的图像。只是显示了一把:

Cache read: http://localhost:3000/assets/jquery.atwho.css?body=1 
Cache read: http://localhost:3000/assets/jquery.selectric.css?body=1 
Cache read: http://localhost:3000/assets/font-awesome.css?body=1 
Cache read: http://localhost:3000/assets/480.css?body=1 
Cache read: http://localhost:3000/assets/768.css?body=1 

我使用的quiet_assets gem作为建议在another SO post,但是这不工作的这些“缓存读取”语句。

是否有一些简单的设置我在config/environments/development.rb中缺少不输出这些日志?谢谢大家

编辑:这里是我的development.rb设置(我包括任何可能相关的):

config.consider_all_requests_local = true 

# cache store 
config.action_controller.perform_caching = true 
config.cache_store = :dalli_store, nil, { 
    value_max_bytes: 10485760, 
    compress: true 
} 
config.static_cache_control = "public, max-age=2592000" 

config.assets.compress = false 
config.assets.debug = true 
config.assets.logger = false 
+0

你可以显示你的'development.rb'配置吗?我在日志中没有看到这样的行,所以可能有一些设置会触发它。 – BoraMa

+0

@BoraMa好的电话,我更新了我的问题,显示'development.rb' config – DelPiero

回答

1

“缓存读取”线从达利缓存后端到来,显示所有对Dalli缓存存储的访问。如果你想取消的只是对付“资产”键访问该调试线,但仍然有其他人登录,你将不得不猴子补丁达利在Rails初始化:

# config/initializers/dalli_assets_silencer.rb: 
module ActiveSupport 
    module Cache 
    class DalliStore 

     private 

     alias_method :orig_log, :log 

     # silences "Cache read ..." etc debug lines for assets, but allows all others 
     def log(operation, key, options=nil) 
     return if key.to_s.include?("/assets/") 
     orig_log(operation, key, options) 
     end 

    end 
    end 
end 

的初始化重新定义的log method Dalli存储,以便它只在密钥与"/assets/"字符串不匹配时才实际记录缓存访问。如果是这样,重新定义的log什么都不做。

+0

非常好,非常感谢!用'“/ assets /”'在其中平静了所有'Cache read'语句。仍然有很长的日志输出,看起来像某种类型的摘要:“缓存读取:4930ce0c6ab3bcab1daa8f0d67791c6834742c7b”(但其中几十个)。我检查了日志调用,它看起来像'operation'是':read','key'是摘要,例如。 '4930ce0c6ab3bcab1daa8f0d67791c6834742c7b'。我不认为有办法将这些过滤出来,同时保持非资产缓存读取完好? – DelPiero

+1

可以使用相同的模式来匹配任何要忽略的内容,或者,在这种情况下,可以使用'log'重写方法中的正则表达式。像这样的东西,例如:'如果key.to_s.include?(“/ assets /”)||返回key.to_s =〜/ [0-9a-f] {30,} /'应该匹配超过30个字符的资产键和摘要键。 – BoraMa