Rails tip #3: Filter BLOBs from ActiveRecord logging
We threw attachment_fu
into our app the other day, starting off with the default :db_file
setting to store images in the database. (I've been bitten by this approach before, but this time around I'm intrigued by page caching. We'll see.)
In the meantime, we've got blob after blob flying by in the script/server
output, and it's messing up our Terminal
fonts. No good.
Here's a quick fix, config/initializers/filter_db_files_logging.rb
:
class ActiveRecord::ConnectionAdapters::AbstractAdapter
def format_log_entry_with_db_files_filtering(message, dump = nil)
dump = 'INSERT INTO db_files' if dump.to_s =~ /^INSERT INTO db_files/
dump = 'UPDATE db_files' if dump.to_s =~ /^UPDATE db_files/
format_log_entry_without_db_files_filtering(message, dump)
end
alias_method_chain :format_log_entry, :db_files_filtering
end
Note that this isn't yet a general solution (other tables' blobs will still be logged), but it's good enough for our needs, and we've got a known place we can come back to should we need to filter more blobs in the future.
Also, looking at AbstractAdapter#log_info
just now, we notice that could have written our own Logger
and saved the monkeypatch. Maybe we'll look into doing that some day.
5 Rails tips
Each day this week, Joachim and I will post something we've learned in our time programming together. It's fun to do, and we might just win something as well.
So far, we've written:
- Reloadable custom FormBuilder
- Faking DATA in tests
- Filter BLOBs from ActiveRecord logging