我遇到一个问题,在我看来,这对大多数的rails用户来说都是一个问题,但是我找不到任何解决方案.
例如,当执行文件上传可能较大的二进制文件并将其存储在数据库中时,您绝对不希望rails或ActiveRecord在开发模式(日志文件stdout)中记录该特定字段.如果文件相当大,这将导致查询执行中断,几乎可以杀死我的终端.
是否有任何可靠和非恶意的方法来禁用特定字段的日志记录?记住,我不是在说要求参数禁用日志记录 – 这已经很好地解决了.
感谢任何有关的信息!
解决方法
如果这有助于任何人,这里是上述代码段的Rails 4.1兼容版本,还包括修改非二进制绑定参数(例如文本或json列),并在编辑之前将日志记录增加到100个字符.感谢大家的帮助!
class ActiveRecord::ConnectionAdapters::AbstractAdapter protected def log_with_binary_truncate(sql,name="sql",binds=[],statement_name = nil,&block) binds = binds.map do |col,data| if data.is_a?(String) && data.size > 100 data = "#{data[0,10]} [REDACTED #{data.size - 20} bytes] #{data[-10,10]}" end [col,data] end sql = sql.gsub(/(?<='\\x[0-9a-f]{100})[0-9a-f]{100,}?(?=[0-9a-f]{100}')/) do |match| "[REDACTED #{match.size} chars]" end log_without_binary_truncate(sql,name,binds,statement_name,&block) end alias_method_chain :log,:binary_truncate end
原文地址:https://www.jb51.cc/ruby/266738.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。