What is Ruby Enterprise Edition?
Ruby Enterprise Edition (REE) is a server-oriented distribution of the official Ruby interpreter, and includes various additional enhancements, such as:
- A “copy-on-write friendly” garbage collector, capable of reducing Ruby on Rails applications’ memory usage by 33% on average.
- The tcmalloc memory allocator, which lowers overall memory usage and boosts memory allocation speed.
- The ability to performance tune the garbage collector.
- The MBARI patch set, for improved garbage collection efficiency.
- The zero-copy context switching patch, included as an experimental feature.
- Various analysis and debugging features.
REE can be easily installed in parallel to your existing Ruby interpreter, allowing you switch to REE with minimal hassle or risk. REE has been out for several years now and is already used by many high-profile websites and organizations, such as New York Times, Twitter, Shopify and 37signals.
“We switched to enterprise ruby to get the full benefit of the [copy-on-write] memory characteristics and we can absolutely confirm the memory savings of 30% some others have reported. This is many thousand dollars of savings even at today’s hardware prices.”
— Tobias Lütke (Shopify)
Ruby Enterprise Edition is 100% open source.
- Upgraded to Ruby 1.8.7-p330
- The previous REE release was based on 1.8.7-p249.
- Upgraded to RubyGems 1.5.2
- The previous REE release included RubyGems 1.3.7.
Please note that Rails versions older than about 2.3.8 are not compatible with RubyGems 1.5. So if you find your Rails apps unable to start after upgrading REE, you know why. There are two things you can do:
- Manually downgrade RubyGems.
- Upgrade your apps to Rails 2.3.11 or 3.0.4. We recommend this choice because of the recent security fixes in Rails.
- Upgraded tcmalloc to version 1.7
- The previous REE release included tcmalloc 1.4. Version 1.7 also supports OS X Snow Leopard, so tcmalloc support in REE is now enabled by default on OS X.
- Fix backport: zlib garbage collection problem (fixes ‘bundle install’ problems)
- We’ve received a lot of reports about ‘bundle install’ sometimes failing for mysterious reasons. It reports something along the lines of:
tar_input.rb:49:in `initialize': not in gzip format (Zlib::GzipFile::Error)
The reason behind this problem has long remained elusive because of the difficulty to reproduce it, until Aman Gupta found a lead. It turned out to be a garbage collection bug in the Ruby zlib extension. The bug is even present in the latest upstream Ruby 1.8.7 release (p330), though not in Ruby 1.9. We’ve backported the fix to 1.8 and included it REE. Issue #45.
- Fix backport: mutex deadlock detection
- Multithreaded programs can sometimes crash with a mysterious “deadlock detected – mutual join” error message even if the code is correct (example). This is apparently a bug in Ruby’s Mutex implementation, but the fix is not included in the latest upstream Ruby 1.8.7 release (p330). We’ve backported the fix and included it in REE. Issue #46.
- Fixed –dont-install-useful-gems in the installer
- The installer used to crash when this flag is passed. This has now been fixed. Issue #42.
- Fixed memory leaks in the zero-copy context switching patch
- Fix contributed by Kurt Stephens. Issue #57.
Download & upgrade
To install Ruby Enterprise Edition, please visit the download page. To upgrade from a previous version, simply install into the same prefix that you installed to last time. Please also refer to the documentation for upgrade instructions.