How to Compress a String in Ruby (and Rails)

You can compress large strings using the Zlib module provided by Ruby's standard library.

1 min read

Ruby's standard library provides the Zlib module, which allows you to access the popular zlib library, a portable, free, and lossless data-compression library. It performs the compression and decompression functions in memory.

Using Zlib module, You can compress a string as follows.

require 'zlib'

log_file = File.read('log/development.log')

puts log_file.size # 4864196

compressed_log = Zlib::Deflate.deflate(log_file)

compressed_log.size # 283024

As you can see, the compressed file is only 1/5th of the original file.

To decompress a compressed file, use the Inflate class provided by this module.

original_log = Zlib::Inflate.inflate(compressed_log)
 
puts original_log.size # 4871532

So that's how you can compress and decompress strings in Ruby.

Compression in Rails

If you are working in a Rails application, you can use the ActiveSupport::Gzip wrapper, which simplifies the compression API.

compressed_log = ActiveSupport::Gzip.compress('large string')
=> "\x1F\x8B\b\x00yq5c\x00\x03..."

original_log = ActiveSupport::Gzip.decompress(compressed_log)
=> "large string"

Behind the scenes, the compress method uses the Zlib::GzipWriter class which writes gzipped files. Similarly, the decompress method uses Zlib::GzipReader class which reads a gzipped file.