【发布时间】:2012-02-11 18:39:47
【问题描述】:
我的一个模型有一个巨大的文本列,我想在将其存储到数据库之前对其进行压缩(不是为了节省磁盘空间,而是因为我不想通过网络发送未压缩的字段我的数据库服务器到我的应用服务器)
如果相关,我的数据库是 postgresql
这是我尝试编写的扩展,但由于某种原因,这在生产中不起作用(实际存储在数据库中的数据看起来像十六进制(例如“34bee1c2d099ba21da3ac533d5f99cda2654feb73985430df39c5ffd8fbf9d9ff3aa9392d5a5”而不是 Zlib 输出(例如“A\xEB\x \xF2Oy=\x9C\x7F5\xE9\xC44\x01M\")。不知道发生了什么
module HasCompressedAttributes
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def has_compressed_attributes(*fields)
fields.each do |field|
define_method(:"#{field}=") do |uncompressed|
write_attribute(:"#{field}", Zlib::Deflate.deflate(uncompressed))
end
define_method(:"#{field}") do
Zlib::Inflate.inflate(read_attribute(:"#{field}")) rescue nil
end
end
end
end
end
ActiveRecord::Base.class_eval{ include HasCompressedAttributes }
这里有更好的方法吗?也许是现有的宝石?
【问题讨论】:
标签: ruby-on-rails database postgresql compression