Ruby Enterprise Edition second sponsorship campaign
What is Ruby Enterprise Edition?
Ruby Enterprise Edition (REE) is a server-oriented distribution of the official Ruby interpreter, and includes various additional enhancements. REE’s main benefits are the ability to reduce Ruby on Rails applications’ memory usage by 33% on average, the ability to increase applications’ performance and the inclusion of various analysis and debugging features. The lower memory usage and increased performance are possible because REE includes – among other enhancements – a copy-on-write friendly garbage collector, as well as an improved memory allocator. REE has been out for several months now and is already used by many high-profile websites and organizations, such as New York Times, 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)
And just like Phusion Passenger, Ruby Enterprise Edition is 100% open source.
Announcing the second sponsorship campaign
The last REE sponsorship campaign was a huge success. Thanks to the last campaign REE has gained 64-bit OS support, MacOS X support and Solaris support. It has incorporated the RailsBench GC enhancements, which allows one to further improve server performance by tweaking the garbage collector settings.
We hereby announce a second sponsorship campaign. Unlike the last campaign, this one is public and everyone can participate.
This campaign will cover the following work:
- Tcmalloc support for 64-bit operating systems.
REE’s copy-on-write optimizations work on 64-bit operating systems. But the improved memory allocator that REE includes, tcmalloc, is disabled on 64-bit platforms for various reasons. It would be more efficient if tcmalloc is enabled on 64-bit platforms because it would allow one to save more memory and to gain more performance. We’ll perform the necessary work to properly integrate tcmalloc in 64-bit operating systems. - Porting and incorporating the RubyProf GC patches.
These patches add the ability to measure the number of objects in Ruby and to measure the amount of allocated memory, which is very useful in various debugging scenarios. RubyProf automatically uses this functionality for GC profiling if the Ruby interpreter is properly patched. The existing patches aren’t fully compatible with REE at this moment. We can port these patches and make sure that it works properly with the existing REE patches. - Better documentation.
A lot of cool new features, e.g. caller_for_all_threads and the RailsBench patches, have been added to REE lately. But at this time, these features aren’t very well documented, and the existing documentation is scattered all over the Internet. We can write a unified manual which teaches developers how to effectively use these new REE features to debug applications.
The goal of this campaign is 2000 USD. Once the campaign goal has been reached, we’ll release the work as soon as it has been finished. Highlights:
- All sponsors will be given credit on the related REE release announcement on our blog. If the sponsor is an organization then we’ll link to the website, if available.
- The money that we receive through this campaign shall be treated like donations.
- An invoice is available if both of the following conditions apply:
- You are an organization based in the European Union.
- You’ve sent 200 USD or more.
- If we receive more money than 2000 USD, then the surplus will be used for the next REE sponsorship campaign.
To sponsor this campaign, please click on the following button:

Thank you, and we wish you a happy 2009!
Passing environment variables to Ruby from Phusion Passenger
Phusion Passenger manages Ruby/Rails process automatically. Sometimes it is necessary set environment variables or to pass environment variables to the Ruby interpreter. This particular aspect of Phusion Passenger isn’t very well documented, so it’s time for a blog post.
Environment variables that may be set after Ruby is started
Some environment variables may be set before or after Ruby is started. These include:
- PATH
- The search path for binaries.
- LD_LIBRARY_PATH
- The search path for shared libraries.
It really doesn’t matter where these environment variables are set, as long as you set them before you use them. These variables may be set in environment.rb.
Setting PATH, LD_LIBRARY_PATH and similar variables
Suppose that your environment.rb runs the program “frobnicate”, and this program is located in /opt/frobnicator/bin, which is not in PATH by default. Furthermore, the “frobnicate” program requires shared libraries which are located in /opt/awesome_runtime/lib. Your environment.rb current looks like this:
...
Rails::Initializer.run do |config|
...
end
...
system("frobnicate") # => ERROR: command not found
Set PATH just before the system() call so that it can find the program:
ENV['PATH'] = "#{ENV['PATH']}:/opt/frobnicator/bin"
system("frobnicate") # => ERROR: cannot load libawesome_runtime.so
Now set LD_LIBRARY_PATH so that the program can find its libraries:
ENV['PATH'] = "#{ENV['PATH']}:/opt/frobnicator/bin"
ENV['LD_LIBRARY_PATH'] = "#{ENV['LD_LIBRARY_PATH']}:/opt/awesome_runtime/lib"
system("frobnicate") # => success!
Setting GEM_PATH, the RubyGems search path
If you’re on a shared host (e.g. Dreamhost) or on some other server for which you do not have root privileges, then you have no choice but to install gems to somewhere inside your home folder. You also need to tell RubyGems to look in there, and that’s what GEM_PATH is for.
Suppose that you’ve installed the gem “ruby-frobnicator” into /home/foobar/my_gems. In your environment.rb you must set GEM_PATH and call Gem.clear_paths just before requiring the gem, like this:
...
Rails::Initializer.run do |config|
...
end
...
ENV['GEM_PATH'] = "/home/foobar/my_gems:#{ENV['GEM_PATH']}"
Gem.clear_paths
require 'ruby-frobnicator' # => it works!
Environment variables that must be set before Ruby is started
Some environment variables must be set before Ruby is started because the Ruby interpreter itself uses them. The RailsBench GC settings environment variables, which are now supported by Ruby Enterprise Edition, are examples of such environment variables.
You can set these environment variables by writing a wrapper script. Recall that Phusion Passenger has a “PassengerRuby” configuration option which typically looks like this:
PassengerRuby /usr/bin/ruby
You can point this to a wrapper script:
PassengerRuby /usr/local/my_ruby_wrapper_script
/usr/local/my_ruby_wrapper_script can set the environment variables prior to executing the real Ruby interpreter:
#!/bin/sh export RUBY_HEAP_MIN_SLOTS=10000 export RUBY_HEAP_SLOTS_INCREMENT=10000 export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1.8 export RUBY_GC_MALLOC_LIMIT=8000000 export RUBY_HEAP_FREE_MIN=4096 exec "/usr/bin/ruby" "$@"
A few notes for those who are not familiar with writing shell scripts:
- Make sure you make /usr/local/my_ruby_wrapper_script executable with chmod +x.
- Make sure that you prepend the “export” keyword to all environment variable setter statements.
- The last line says “replace the current process with /usr/bin/ruby, and pass all commandline argument that I’ve received to Ruby”. Make sure that $@ is wrapped inside double quotes, otherwise filenames with spaces in them won’t be passed correctly to the Ruby interpreter.
But wait, I’ve already set environment variables in my /etc/bashrc or /etc/profile. Why don’t they work?
If you’ve set environment variables in your /etc/bashrc or /etc/profile, then these environment variables are made available in your shell. However, on most operating systems, Apache is not started from the shell and does not load environment variables defined in bashrc/profile, which is why setting environment variables in /etc/bashrc and /etc/profile usually has no effect on Apache (and by induction, on Passenger and Rails processes).
Final words
This is just a quick blog post which I’ve written after seeing many people asking questions on this subject. This subject deserves proper official documentation, but I haven’t had the time to do it yet. If anybody wants to submit a documentation patch then please feel free to do so. In the long term it would probably be nice if one can pass environment variables to the Ruby interpreter via Apache configuration options, but it’s not a very high priority issue at this moment.
Ruby Enterprise Edition 1.8.6-20081215 released
Ruby Enterprise Edition 1.8.6-20081215 has been released. This version includes one bug fix:
- Fixed compilation problems on newer versions of GCC
- People using Ubuntu 8.10 and other recent distributions with a recent version of GCC experienced compilation problems. This has been fixed.
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.
Phusion Passenger 2.0.6 released
Phusion Passenger is an Apache module for deploying Ruby on Rails web applications, and is mainly focused on ease of use and stability.
Recent changes
Phusion Passenger is under constant maintenance and development. We are pleased to announce Phusion Passenger version 2.0.6. This is a minor bugfix release.
- Fixed Ruby 1.8.5 compatibility
- In the previous release, we fixed Ruby 1.8.7 compatibility, but this broke 1.8.5. We’ve fixed this.
- Removed unintentional dependency on MySQL and SQLite
- Phusion Passenger 2.0.5 preloads the mysql and sqlite3 libraries when running in Ruby Enterprise Edition, for better copy-on-write efficiency. But it didn’t take into account that these libraries may not be installed. This has been fixed.
How do I upgrade to 2.0.6?
Via a gem
Please install it with the following command:
gem install passenger
Next, run:
passenger-install-apache2-module
Please don’t forget to copy & paste the Apache config snippet that the installer gives you.
Via a native Linux package
John Leach from Brightbox has kindly provided an Ubuntu 8.04 package for Phusion Passenger. The package is available from the Brightbox repository which you can find at:
http://apt.brightbox.net
Add the following line to the Third Party Software Sources:
deb http://apt.brightbox.net hardy main
(The simplest way to do that is to create a file in /etc/apt/sources.list.d/ containing the deb instruction, and then run ‘apt-get update‘).
Once you’ve done this then you can install Phusion Passenger by running:
apt-get install libapache2-mod-passenger
(Note that John is currently packaging 2.0.6, so it might take a while before this release shows up in the apt repository.)
Final
Phusion Passenger is provided to the community for free. If you like Phusion Passenger, please consider sending us a donation. Thanks!
Hongli Lai
|
Ninh Bui
|
Re: EngineYard’s recent post about Phusion Passenger
At Phusion, we’ve received some comments from Engine Yard customers who have mentioned that upon requesting support for Passenger, they were advised to stick with an Nginx + Mongrel setup instead. Even though Passenger is our flagship product, I also have the utmost respect for both Mongrel and Nginx, and believe that people should choose the solution they deem most suitable and pragmatic for the job. In light of this, I believe Passenger and Apache are just as viable a solution for “the deployment problem” as the aforementioned solutions. Unfortunately, after inquiring a bit further, I was unable to get a clear answer as to why they were advised by Engine Yard to not use Passenger specifically.
After reading some responses on Ezra’s talk on Rails deployment, and in particular, after reading this summary by an attendee of this talk, the impression seemed to be made that Passenger was only, if not more suitable, for small VPS and/or shared hosting environments. Unfortunately, I was unable to attend this talk myself but luckily, Ezra has made his slides publicly available on his blog.
Here, slide 13 states “Passenger(with caveats)” and “State of art now: Passenger for shared hosting/small VPS”. Clearly, we’re unable to infer what is being said here without the proper narrative/annotations which unfortunately isn’t available. This leaves room for interpretation and the slides on their own seem to suggest that Passenger “has caveats” and is the best solution for shared hosting/small VPS. Even though it seems to do a great job in these fields, it’s certainly not the only goal we had in mind when we were designing and engineering Passenger.
Taking this into consideration, I felt inclined to further investigate and asked Ezra for some elaboration in the comments section of the aforementioned blogs. Here it soon became apparent that Ezra seemed to have problems with the memory consumption of Apache and Ruby Enterprise Edition(REE) not giving them memory savings on 64bit platforms but segfaulting instead.
As I’ve pointed out earlier in the comments section of Ezra’s blog, I believe it’s one thing (and very unfortunate) that saying one solution isn’t working out for Engine Yard, but it’s an entirely different matter to give the impression that is therefore more suitable for VPS/small hosting. Especially if no specifics are or have ever been given about this potential problem in order for people like us to try to reproduce it. After asking for these specifics, Ezra commented that he would contact us on this, but Ezra is probably a super busy man so we unfortunately didn’t receive anything on this as of yet. The just recently released Ruby Enterprise Edition however, contains fixes that should increase the support for 64bit and we hope that they will solve any problems people might have with this on their 64bit platform.
Update:
It seems Ezra sent us an email at around the same time this reply was posted which contents now seems to indicate a working REE setup on their 64 bit platform!
I’d still be interested in learning more about their test suite though which would allow us verify a working setup through reproduction, and I’m sure the community would benefit from having this kind of knowledge as well.
Many thanks to the following people and organizations for making this possible through sponsorship (list sorted in alphabetical order):
- 37signals
- Curve21
- Dr Dispatch Transportation Software
- InfoEther
- Martian Interactive
- New York Times
- Shopify
- Trevor Turk
- Utah Imaging
After releasing both Passenger 2.0.5 and Ruby Enterprise Edition, Tom Mornini from Engine Yard elaborated a bit more on the reasons why Engine Yard is currently favoring Nginx + Mongrel over Passenger + Apache. Seeing as some reasons are given with regards to Passenger and Apache, I’d like to go over these to try to get the entire story across for you to decide whether or not it is suitable for you.
First off, Tom writes:
“If you’re running multiple Rails applications, and are using Passenger’s ability to serve more applications than applications processes, you need to be aware of the performance of requests requiring an application process switch from one application to another. First requests are always slow, as a *lot* of code needs to be heated up, etc.”
Here, I believe the very first thing to note is the first word Tom uses in this paragraph, being “if”. “If” you are running multiple Rails applications and are using Passenger’s ability to serve more applications than application processes, then yes, you need to be aware of the possibility of the performance of requests requiring an application switch from one application to another. The reason why I’ve emphasized possibility here is that you need to have more concurrent requests in progress than application processes in the first place in order to be able to get into such a situation. Having said that, one could just as easily increase the allowed application instances Passenger is allowed to spawn to the number of applications we have and increase the PassengerPoolIdleTime to a sufficiently large number so that they will virtually live as long as you’ll ever need. In git master, we’ve made this solution a bit more elegant by providing a sugar that allows you to assign a negative value to PassengerPoolIdleTime, which will result in it “living infinitely long” and you can expect this to be in 2.0.6. Doing something like this will essentially give you the same behavior as having and keeping multiple mongrel instances alive behind a proxy balancer. The key thing to note here however, is that we actually allow you to choose for an alternative setup as well to accommodate your needs even better. Just as there are situations in which you want the behavior Tom is describing, there are situations where it is perhaps deemed more suitable to have less application processes than actual applications (e.g. where memory is limited). The important thing to remember here however, is that Passenger allows you to do both (very easily). Doing the aforementioned with Passenger requires you to just modify two numeric values in the Apache configuration (PassengerPoolIdleTime and PassengerMaxPoolSize) and doesn’t involve manual port management for example which in general, is necessary for proxy-load-balanced-mongrel setups. Using Passenger to establish the same setup as proxy-load-balanced-mongrel setups involves significantly less steps, making it arguably less tedious and less error prone to maintain. Unfortunately, this part isn’t elaborated on in Tom’s post, which could result in people being left only half informed.
Also, Tom has made mention of Passenger possibly needing to load a “lot” of code. Even though Tom acknowledges that Ruby Enterprise Edition *does* offer the additional advantage of memory savings, there doesn’t seem to be an explicit mention of the fact that Ruby Enterprise Edition negates “this need to load a lot of code” dramatically/entirely by leveraging a technique called Copy-on-Write which is available on a myriad of *nix variants. Copy-on-Write works on an operating systems level so if you already have a running Rails process, by the time you need to spawn a new one, the operating system is able to infer that most –if not all– memory can be pooled and doesn’t need to be replicated. This in particular is the case for identical applications, where not only the Rails framework will be shared among processes but also the application code.
Moving on, Tom writes:
“The issues I’m discussing are generally acceptable in a situation where you have many low traffic applications, and you need to run those applications in a very limited environment. At Engine Yard, this is a very rare need for our customers, so this makes us less anxious to switch to something new -vs- something that is proven and works well.”
Even though just shy of 8 months in production status, a growing number of very large sites (see here and here) are using REE and Passenger to successfully serve millions upon millions of request per day respectively. I’m not sure what one would need to do to get it to a point of being considered “proven and working well”, but what I do however know is that sites by MTV, Yammer, Geni, Shopify and 37signals are powered by Passenger and seem to have no problems dealing with high-volume requests.
Moving on, Tom writes:
“With the additional of Ruby Enterprise Edition, however, it *does* offer the additional advantage of memory savings. Some of those advantages are lost by having to run Apache, which as commonly delivered, is considerably larger and less efficient than nginx. Of course, you can reduce these disadvantages by cuting down a custom build and tweaking the included modules, but once you’re headed down that road, the simplicity advantage has left the building.
”
Even though we’ve also inferred that an “out-of-the-box” Apache installation incurs a larger overhead than an “out-of-the-box” Nginx, it begs the question if this is really relevant in this article. After all, I was under the impression that Tom was elaborating about why Engine Yard isn’t using Passenger + Apache, where he also mentions that one can configure Apache to get comparable results to Nginx, effectively giving the answer to Engine Yard’s own “problems” with Apache.
From our experience, configuring an Apache setup to “perform on par with Nginx” isn’t trivial, but it’s very doable. Also note that this initial time one spends on setting up such an Apache installation is being rewarded by not having to maintain a relatively more difficult setup with nginx+mongrel. Here, you need to ask yourself how much time you spend on doing an Apache setup as opposed to maintaining the actual installation, i.e. how many times you update Apache as opposed to maintaining and updating Passenger. In general, from our experience, the former doesn’t take as nearly as much time as the latter. To get a sense of what I’m trying to get at, please take a look at the Apache site where you can see that the previous and most current version were released about 9 months apart from each other by the time of this writing. If we also take into account that in general, your old Apache configuration files will probably still work after doing an Apache upgrade, then I’m not sure if this really is such a big problem as it is made out to be. Especially with the solution we’re currently working on, which I hope to be able to elaborate a bit more about soon.
One thing is for sure however, heavily visited Passenger powered sites like Shopify which processes millions upon millions of requests per day
certainly don’t seem to have a problem with neither memory or performance and benefit greatly from this approach.
In particular, you might find the following quote from Tobias Lütke of Shopify fame
to be of particular interest:
“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.”
Moving on, Tom writes:
“Second, our customers choose Engine Yard for experience and expertise in hosting Rails applications. At this moment, we have no experience or expertise in Passenger™.
That is a fact.”
Well fortunately, Phusion offers commercial support for Passenger so this doesn’t necessarily have to be a problem.
More interestingly however, is that even though Engine Yard claims to not have experience or expertise in Passenger, they seem to be perfectly capable of making some strong statements about it anyway as found on Ezra’s slides and Tom’s blog post. This also, is a fact.
In closing, somewhere in the middle of the article, Tom writes:
“The reason that I felt compelled to respond to Pratik’s Twitter post is that it entirely ignores a few issues that prevent Engine Yard, and no doubt other companies from immediately supporting Passenger™ and/or Ruby Enterprise Edition.”
In a similar fashion, I felt inclined to respond to Tom’s article seeing as it completely seemed to ignore a few (easy) solutions as well.
The morale of the story: feel encouraged to try out different solutions to find out which one suits you best, regardless of its current life-span, because that’s the only way of helping a product mature. In any case, please remain critical of information you receive, and yes, that even means this blog post. Seeing is believing right? Whatever the case may be, stay tuned for more exciting news from Phusion.
Ruby Enterprise Edition 1.8.6-20081205 released, thank you sponsors
Ruby Enterprise Edition (REE) is a branch of the official Ruby interpreter which is capable of reducing your Rails applications’ memory usage by 33% on average, as well as improving your applications’ performance. This is possible because REE includes copy-on-write enhancements for the garbage collector, as well as an improved memory allocator (tcmalloc). REE has been out for several months now and is already used by many high-profile websites and organizations, such as New York Times, 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)
And just like Phusion Passenger, Ruby Enterprise Edition is 100% open source.
Recent developments
REE has just become better. We had been talking with DHH from 37signals about a possible sponsorship campaign for supporting REE development. The campaign has recently ended, and so we’re presenting the world with Ruby Enterprise Edition version 1.8.6-20081205.
The sponsored improvements are:
- Integration with the RailsBench garbage collector patches
- These patches allow one to tweak various garbage collector settings. 37signals uses this to greatly improve server performance. The RailsBench GC patches did not work on REE in previous releases, but now we’ve properly integrated them into REE.
- Better Mac OS X support
-
Previous versions sort-of support Mac OS X, but some people have reported problems. We’ve improved Mac OS X support as follows:
- Installation should now work out-of-the-box on Mac OS X.
- The tcmalloc memory allocator has been properly integrated with Mac OS X. Tcmalloc is what makes REE faster than the standard Ruby interpreter. In previous versions, tcmalloc was disabled when installing on OS X because it didn’t work properly on OS X. This not only meant that there were no performance gains compared to standard Ruby, it also meant that the copy-on-write optimizations were a bit less effective than they could be. By properly integrating tcmalloc on OS X, which was a tough task, OS X users can now fully enjoy the improved performance and copy-on-write optimizations.
- Various OS X-related crashes have been fixed.
Special thanks to Stephen Heuer from Arux Software Inc. for providing access to an OS X testing environment.
- Better 64-bit support
- Even though previous versions support 64-bit platforms, many people experienced problems. We’ve spent some time making sure that installation works out-of-the-box on 64-bit platforms. We’ve tested against 64-bit FreeBSD 7 and 64-bit Ubuntu 8.10 Server.
- Better Solaris support
- We’ve made sure that installation works out-of-the-box.
Special thanks goes out to our friends at Sun for providing us with access to a Solaris testing environment.
In addition, this release also comes with various non-sponsored improvements and changes:
- caller_for_all_threads
- Philippe Hanrigou’s caller_for_all_threads patches have been integrated into REE. This feature allows one to dump the stack trace of all running threads in a Ruby application. This feature is a must-have for debugging multithreaded web applications.
Phusion Passenger’s development version has already been updated to take advantage of this feature, when available. It will be available starting from Phusion Passenger version 2.1.0 (which hasn’t been released yet at the moment of writing).
- RubyGems updated to version 1.3.1.
- The previous REE release ships with RubyGems 1.2. Version 1.3.1 is now included. FYI: Ruby on Rails 2.2 requires RubyGems 1.3.1.
- REE’s RubyGems no longer makes use of the existing gems
- One of the most often requested features is that REE’s RubyGems should be able to use the gems that are already installed (i.e. the gems that have been installed for the system’s Ruby interpreter). The previous REE release implemented this feature.
However, it turns out that this can cause problems with native extensions, e.g. RMagick and the Ruby MySQL library. If one uses REE to load a native extension that was originally compiled for the system’s Ruby, then REE might crash. So this feature has been removed. You should install all gems that you need with REE’s RubyGems.
- ree-version
- An ‘ree-version’ command is now provided. This command prints out the REE version number. This makes it easier for people to track REE updates.
The sponsors
Many thanks to the following people and organizations for sponsoring this release (list sorted in alphabetical order):
- 37signals
- Curve21
- Dr Dispatch Transportation Software
- InfoEther
- Martian Interactive
- New York Times
- Shopify
- Trevor Turk
- Utah Imaging
Officially tested platforms
We’ve tested this release of Ruby Enterprise Edition on the following platforms:
- Ubuntu Linux 8.04 Desktop (x86)
- Ubuntu Linux 8.10 Server (x86_64)
- Mac OS X 10.5.5 Server (x86)
- FreeBSD 5.0 (x86)
- FreeBSD 7.0 (x86_64)
- Sun Solaris (Sparc)
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.
Phusion Passenger 2.0.5 released; mentioned on live.37signals.com
Phusion Passenger is an Apache module for deploying Ruby on Rails web applications, and is mainly focused on ease of use and stability. Since its first release in April 2008, it has gained quite a lot of attention from the Rails community, and nowadays it has become a very popular deployment tool.
We have recently been mentioned on live.37signals.com where David Heinemeier Hansson, creator of Ruby on Rails, has given his praise to Phusion Passenger. Not too long ago, 37signals switched Ta-da List to Phusion Passenger, and are now in the progress of switching more websites.
live.37signals.com isn’t broadcasting right now, but you can find recordings at justin.tv.
Recent changes
Phusion Passenger is under constant maintenance and development. We are pleased to announce Phusion Passenger version 2.0.5. This is mainly a bugfix release.
- Fixed global queuing compatibility with the worker MPM
- The global queuing feature that was introduced in version 2.0.4 was found to cause deadlocks when used in combination with the worker MPM of Apache. This problem only occurs when global queuing is used in combination with the worker MPM; users of the prefork MPM (i.e. most Apache users) are not affected.
This problem has been fixed.
- Ruby on Rails 2.3′s Rack adapter now supported
- Ruby on Rails 2.3 hasn’t been released yet, but we’ve already added support for it. In Rails 2.3, the old CGI-based dispatcher will be removed in favor of the new Rack-based dispatcher. Phusion Passenger will automatically use this new Rack-based dispatcher upon detecting Rails 2.3.
- Fixed compilation problems with Ruby 1.8.7
- The title says it all.
- Various other bug fixes and stability improvements
- These are too minor to mention in this announcement, but interested people can take a look at the commit list.
How do I upgrade to 2.0.5?
Via a gem
Please install it with the following command:
gem install passenger
Next, run:
passenger-install-apache2-module
Please don’t forget to copy & paste the Apache config snippet that the installer gives you.
Via a native Linux package
John Leach from Brightbox has kindly provided an Ubuntu 8.04 package for Phusion Passenger. The package is available from the Brightbox repository which you can find at:
http://apt.brightbox.net
Add the following line to the Third Party Software Sources:
deb http://apt.brightbox.net hardy main
(The simplest way to do that is to create a file in /etc/apt/sources.list.d/ containing the deb instruction, and then run ‘apt-get update‘).
Once you’ve done this then you can install Phusion Passenger by running:
apt-get install libapache2-mod-passenger
(Note that John is currently packaging 2.0.5, so it might take a while before this release shows up in the apt repository.)
Final
Phusion Passenger is provided to the community for free. If you like Phusion Passenger, please consider sending us a donation. Thanks!
Hongli Lai
|
Ninh Bui
|
Phusion Passenger 2.0.4 released; 37signals’s Ta-da List now using Passenger
Phusion Passenger is an Apache module for deploying Ruby on Rails web applications, and is mainly focused on ease of use and stability. Since its first release in April 2008, it has gained quite a lot of attention from the Rails community, and nowadays it has become a very popular deployment tool.
Tobias Lütke has recently announced that Shopify is now running Phusion Passenger:
“In conclusion: I cannot see any reason to choose a different deployment strategy at this point. Its simple, complete, fast and well documented.” —
Tobias Lütke
Even 37signals is now using Phusion Passenger. They’ve recently announced that they’ve switched Ta-da List to Phusion Passenger:
“We’re really impressed with the ease of deployment and stability under Passenger. The app now requires less than 10 lines of configuration to launch and deploy.” — Joshua Sierles
Recent changes
Phusion Passenger is under constant maintenance and development. We are pleased to announce Phusion Passenger version 2.0.4. This is mainly a bugfix release, but contains one new feature. The changes are as follows:
- Global queuing
- We recently announced that we’ve developed a feature called global queuing. This feature was requested by 37signals. When global queuing is on, Phusion Passenger will load balance all incoming requests into the first available backend process. This is especially useful if you have long-running requests, e.g. requests that perform heavy calculations and can take several seconds to finish. See this blog post for a more detailed description.
This feature is included in Phusion Passenger as of version 2.0.4.
- Fixed compatibility with the latest Rake version and RubyGems version
- When compiling Phusion Passenger using the latest Rake, compilation commands are not shown while various warnings are being shown. This has been fixed. Various RubyGems deprecation warnings have also been fixed.
- Running background programs from within the Rails app won’t freeze the request
- In previous versions of Phusion Passenger, if one executes
system("sleep 10 &")from within the Rails app, then Phusion Passenger won’t finish the request until 10 seconds have gone by. In other words, Phusion Passenger would wait until the background program has finished. This issue is caused by file descriptor leaks, and has been fixed.
- Fixed Mac OS X crash
- A Mac OS X related crash has been fixed.
- Various bug fixes
- The title says it all. If you experienced any kind of problems with previous releases, please try this release as the bug may have been fixed.
How do I upgrade to 2.0.4?
Via a gem
Please install it with the following command:
gem install passenger
Next, run:
passenger-install-apache2-module
Please don’t forget to copy & paste the Apache config snippet that the installer gives you.
Via a native Linux package
John Leach from Brightbox has kindly provided an Ubuntu 8.04 package for Phusion Passenger. The package is available from the Brightbox repository which you can find at:
http://apt.brightbox.net
Add the following line to the Third Party Software Sources:
deb http://apt.brightbox.net hardy main
(The simplest way to do that is to create a file in /etc/apt/sources.list.d/ containing the deb instruction, and then run ‘apt-get update‘).
Once you’ve done this then you can install Phusion Passenger by running:
apt-get install libapache2-mod-passenger
(Note that John is currently packaging 2.0.4, so it might take a while before this release shows up in the apt repository.)
Final
Phusion Passenger is provided to the community for free. If you like Phusion Passenger, please consider sending us a donation. Thanks!
Hongli Lai
|
Ninh Bui
|
Hongli Lai
Phusion. All rights reserved.