Phusion Passenger 3.0.1 released »
Created at: 07.12.2010 01:28, source: Phusion Corporate Blog, tagged: Phusion Passenger
Phusion Passenger is an Apache and Nginx module for deploying Ruby web applications. It has a strong focus on ease of use, stability and performance. Phusion Passenger is built on top of tried-and-true, battle-hardened Unix technologies, yet at the same time introduces innovations not found in most traditional Unix servers. Since version 3.0 it can also run standalone without an external web server, making it not only easier for first-time users but also ideal on development environments.
Recent changes
Phusion Passenger is under constant maintenance and development. We are pleased to announce Phusion Passenger version 3.0.1. This is a bug fix release.
- MUCH faster compilation
- We’ve applied code aggregation techniques, allowing Phusion Passenger to be compiled much quicker now. For example, compiling the Nginx component (not Nginx itself) on a MacBook Pro now takes only 29 seconds instead of 51 seconds, an improvement of 75%! Compiling the Apache module on a slower Dell Inspiron now takes 39 seconds instead of 1 minute 22 seconds, or 110% faster!
- Fixed malfunction after web server restart
- On Linux systems that have a non-standard filesystem on /tmp, Phusion Passenger could malfunction after restarting the web server because of a bug that’s only triggered on certain filesystems. Issue #569.
- Boost upgraded to version 1.44.0.
- We were on 1.42.0.
- Much improved startup error messages
- Phusion Passenger performs many extensive checks during startup to ensure integrity. However the error message in some situation could be vague. These startup error messages have now been improved dramatically, so that if something goes wrong during startup you will now more likely know why.
- Curl < 7.12.1 is now supported
- The previous version fails to compile with Curl versions earlier than 7.12.1. Issue #556.
- passenger-make-enterprisey fixed
- This is the command that people can run after donating. It allows people to slightly modify Phusion Passenger’s display name as a joke. In 3.0.0 it was broken because of a typo. This has been fixed.
- Removed passenger-stress-test
- This tool was used during the early life of Phusion Passenger for stress testing websites. Its performance has never been very good and there are much better tools for stress testing, so this tool has now been removed.
- [Apache] RailsEnv and RackEnv configuration options are now equivalent
- In previous versions, RailsEnv only had effect on Rails 1 and Rails 2 apps while RackEnv only had effect on Rack apps. Because Rails 3 apps are considered Rack apps, setting RailsEnv had no effect on Rails 3 apps. Because this is confusing to users, we’ve now made RailsEnv and RackEnv equivalent. Issue #579.
- [Nginx] Fixed compilation problems on systems with unpowerful shells
- Most notably Solaris. Its default shell does not support some basic constructs that we used in the Nginx configure script.
- [Nginx] Upgraded default Nginx version to to 0.8.53
- The previous default was 0.8.52.
- [Nginx] passenger_enabled now only accepts ‘on’ or ‘off’ values
- Previously it would recognize any value not equal to ‘on’ as meaning ‘off’. This caused confusion among users who thought they could also specify ‘true’, so we now throw a proper error if the value is unrecognized. Fixes issue #583.
How do I upgrade to 3.0.1?
Via a gem
First install the gem with the following command:
gem install passenger
If you’re using Phusion Passenger for Apache or for Nginx, then re-run the Apache or Nginx module installer, whichever is appropriate:
passenger-install-apache2-module passenger-install-nginx-module
At the end the installer will tell you to paste a configuration snippet into your web server config file. Replace the old snippet that you already had with this new one.
Phusion Passenger Standalone users don’t need to run anything else. Whenever you type
passenger start
it will automatically upgrade itself.
Via a native Linux package
John Leach from Brightbox has kindly provided Ubuntu packages 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:
sudo apt-get install libapache2-mod-passenger
-or-
sudo apt-get install nginx-brightbox
(Note that John is currently packaging 3.0.1, 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. Thank you!
more »
Phusion Passenger 3.0.0 final released »
Created at: 18.10.2010 15:09, source: Phusion Corporate Blog, tagged: Phusion Passenger Software
Phusion Passenger is an Apache and Nginx module for deploying Ruby web applications. It has a strong focus on ease of use, stability and performance. Phusion Passenger is built on top of tried-and-true, battle-hardened Unix technologies, yet at the same time introduces innovations not found in most traditional Unix servers. Since version 3.0 it can also run standalone without an external web server, making it not only easier for first-time users but also ideal on development environments.
What’s new compared to 2.2
Phusion Passenger 3 is a major new release and brings about many, many improvements in the areas of performance, features and stability. It is fully compatible with the latest technologies such as Rails 3.0, Ruby 1.9.2, RVM and Bundler.
You can read about the improvements in Phusion Passenger 3 through a set of articles that we had written on this subject:
- Technology Preview 1: Performance
Phusion Passenger 3 can be up to 55% faster than Phusion Passenger 2.2. - Technology Preview 2: Stability, robustness, availability, self-healing
We’ve implemented many safeguards to keep Phusion Passenger stable and running as much as possible. - Technology Preview 3: Closing the gap between development and production & rethinking the word “easy”
Describes how Phusion Passenger’s usage model differs from Mongrel’s, Thin’s and Unicorn’s and when one would prefer our model over the other and vice versa.
Introduces Phusion Passenger Standalone (formerly called Phusion Passenger Lite) which can be used as a potentially improved replacement for Mongrel, Thin and Unicorn. - Technology Preview 4: Adding new features and removing old limitations
- Bonus article: Phusion Passenger & running multiple Ruby versions
What’s new compared to 3.0.0 RC 1
- [Apache] `passenger-install-apache2-module –snippet` no longer prints ANSI color codes
- This makes it possible to pipe its output directly to a config file. Fixes issue #548.
- [Apache] Fixed thread stack size problems on FreeBSD
- Previously it might crash for bizarre reasons.
- [Nginx] Upgraded to Nginx 0.8.52 by default
- This is because Nginx 0.8 has recently become the stable release series.
- [Standalone] Fixed Unix domain socket support
- There was a bug in Phusion Passenger Standalone which would cause the `-S` option to fail.
How do I upgrade to 3.0.0?
Via a gem
First install the gem with the following command:
gem install passenger
If you’re using Phusion Passenger for Apache or for Nginx, then re-run the Apache or Nginx module installer, whichever is appropriate:
passenger-install-apache2-module passenger-install-nginx-module
At the end the installer will tell you to paste a configuration snippet into your web server config file. Replace the old snippet that you already had with this new one.
Phusion Passenger Standalone users don’t need to run anything else. Whenever you type
passenger start
it will automatically upgrade itself.
Via a native Linux package
John Leach from Brightbox has kindly provided Ubuntu packages 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:
sudo apt-get install libapache2-mod-passenger
-or-
sudo apt-get install nginx-brightbox
(Note that John is currently packaging 3.0.0, 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. Thank you!
more »
Phusion Passenger 3.0.0 RC 1 released »
Created at: 01.10.2010 13:34, source: Phusion Corporate Blog, tagged: Phusion Passenger Software
This is it, the first Release Candidate (internally named “pre 4″). A few more bugs have been fixed since beta 3, but if no more serious bugs are found then the next release will be 3.0.0 final.
What’s new
- Autodetection of Ruby tool commands now take exe extension, –program-prefix and –program-suffix into account
-
Phusion Passenger had a pretty elaborate way of searching the system for Ruby tool commands like ‘gem’, ‘rake’, etc. The reason why all this search code exists is because the problem is much more complicated than just searching for “rake” in $PATH. A significant number of people have multiple Ruby versions installed on their system; let’s call these Ruby A and Ruby B. They run the Phusion Passenger installer with Ruby A and they installed the required gems with Ruby A’s RubyGems, but they have a Rake in $PATH that belongs to Ruby B. If we were to naively use the Rake in $PATH then the wrong Rake will be invoked and they would wonder why the gems they just installed aren’t detected. Our Ruby tool search code tries very hard to find the Rake that belongs to the Ruby interpreter that’s currently running.
However the code didn’t take the exe extension into consideration, as well as the –program-prefix and –program-suffix that Ruby could be configured with. For example, on some systems the Ruby command is called “ruby1.8″ and Rake is called “rake1.8″. Similarly, the default JRuby binary distribution calls Rake “jrake”. We’ve now updated our search code to take this into account as well. Issue #537.
Usability and ease of installation remains to be one of our biggest goals. As you can see we’ve gone through great lengths to make sure that everything works as expected and that everything is as fool-proof as possible, even if the system might not be entirely correctly configured.
- Fixed linking problems on some systems
- Phusion Passenger uses math functions such as
pow(). On some systems — .e.g. NetBSD, some versions of Solaris and some Linux distros — this requires Phusion Passenger to be linked to the Math library. Issue #539. - Phusion Passenger Standalone fix
- When Phusion Passenger Standalone is daemonized with -d, it exits with a non-zero exit code. This has been fixed. Issue #536.
- Preferred PCRE version upgraded to version 8.10
- passenger-install-nginx-module automatically installs PCRE for you in case you didn’t already have it.
Installation/upgrade
First install the latest Phusion Passenger gem:
gem install passenger --pre
(Or you can download the tarball.)
If you want to install or upgrade the Apache or Nginx version, then run the installer as you’re used to:
passenger-install-apache2-module passenger-install-nginx-module
At the end the installer will tell you to paste a configuration snippet. If you’re upgrading then replace the old snippet with the new one.
If you want to run Phusion Passenger Standalone, then run:
cd /path-to-your-app passenger start
No special upgrade instructions needed.
The documentation
Users guide for Apache
Users guide for Nginx
Users guide for Standalone
more »
Phusion Passenger & running multiple Ruby versions »
Created at: 21.09.2010 22:51, source: Phusion Corporate Blog, tagged: Phusion Passenger
One of the questions we’ve been getting a lot lately is whether it’s possible to run multiple Ruby versions with Phusion Passenger, e.g. have app A and B run on Ruby 1.8.7 while having app C run on Ruby 1.9.2. In previous versions of Phusion Passenger there were ways to get around that, e.g. by mixing in Mongrels. As of Phusion Passenger 3 you can run all components as Phusion Passenger.
The setup that we currently recommend is to combine Phusion Passenger for Apache or Phusion Passenger for Nginx, with Phusion Passenger Standalone. One must first identify the Ruby version that you use most. One then proceeds with setting up Phusion Passenger for Apache or Phusion Passenger for Nginx to use that Ruby version. All applications that are to use a different Ruby version can be served separately through Phusion Passenger Standalone and hook into the main web server via a reverse proxy configuration.
Example

Suppose that you have four websites:
- foo.com, to run on Ruby 1.8.7.
- bar.com, to run on Ruby 1.8.7.
- fries.com, to run on Ruby 1.9.1.
- hamburgers.com, to run on Ruby 1.9.2.
And suppose that you’re using RVM to manage these Rubies.
Setting up foo.com and bar.com (Ruby 1.8.7)
The Ruby version that you use most is Ruby 1.8.7, so you setup Apache or Nginx to use Ruby 1.8.7 and to serve foo.com and bar.com.
rvm use 1.8.7 gem install passenger --pre # Then one of: passenger-install-apache2-module passenger-install-nginx-module
# Partial Apache configuration
PassengerRuby /home/someuser/.rvm/wrappers/ruby-1.8.7/ruby
<VirtualHost *:80>
ServerName www.foo.com
DocumentRoot /webapps/foo.com/public
</VirtualHost>
<VirtualHost *:80>
ServerName www.bar.com
DocumentRoot /webapps/bar.com/public
</VirtualHost>
# Partial Nginx configuration
passenger_ruby /home/someuser/.rvm/wrappers/ruby-1.8.7/ruby
server {
listen 80;
server_name www.foo.com;
root /webapps/foo.com/public;
passenger_enabled on;
}
server {
listen 80;
server_name www.bar.com;
root /webapps/bar.com/public;
passenger_enabled on;
}
foo.com and bar.com have now been deployed on Phusion Passenger for Apache or Phusion Passenger for Nginx, and running on Ruby 1.8.7.
Setting up fries.com (Ruby 1.9.1)
The next step is to start fries.com in Phusion Passenger Standalone using Ruby 1.9.1. Since port 80 is already used by Apache or Nginx, we use start Phusion Passenger Standalone on a different port.
rvm use 1.9.1 gem install passenger --pre cd /webapps/fries.com passenger start -a 127.0.0.1 -p 3000 -d
Fries.com is now running on localhost port 3000 as a background daemon. Next, connect it to Apache or Nginx via a reverse proxy.
# Partial Apache configuration
<VirtualHost *:80>
ServerName www.fries.com
DocumentRoot /webapps/fries.com/public
PassengerEnabled off
ProxyPass / http://127.0.0.1:3000
ProxyPassReverse / http://127.0.0.1:3000
</VirtualHost>
# Partial Nginx configuration
server {
listen 80;
server_name www.fries.com;
root /webapps/fries.com/public;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
Setting up hamburgers.com (Ruby 1.9.2)
We do the same thing for hamburgers.com. Port 3000 is already in use, so we assign it to port 3001.
rvm use 1.9.2 gem install passenger --pre cd /webapps/hamburgers.com passenger start -a 127.0.0.1 -p 3001 -d
Then we hook it up to the web server via reverse proxying.
# Partial Apache configuration
<VirtualHost *:80>
ServerName www.hamburgers.com
DocumentRoot /webapps/hamburgers.com/public
PassengerEnabled off
ProxyPass / http://127.0.0.1:3001
ProxyPassReverse / http://127.0.0.1:3001
</VirtualHost>
# Partial Nginx configuration
server {
listen 80;
server_name www.hamburgers.com;
root /webapps/hamburgers.com/public;
location / {
proxy_pass http://127.0.0.1:3001;
}
}
Performance tip
Phusion Passenger Standalone also supports listening on a Unix domain socket instead of a TCP socket. Unix domain sockets are significantly faster than TCP sockets.

Only Nginx supports reverse proxying to Unix domain sockets; Apache does not support this.
In order to make Phusion Passenger Standalone listen on a Unix domain socket, you need to run it with Nginx 0.8.21 or higher. In fact we contributed support for Unix domain sockets to Nginx specifically for this feature!
Start Phusion Passenger Standalone like this:
passenger start --socket /tmp/fries.com.socket -d --nginx-version 0.8.50
The --socket option tells Phusion Passenger to bind to the given Unix domain socket. The --nginx-version option tells Phusion Passenger Standalone to use Nginx 0.8; 0.7 is the default.
Next you must setup an Nginx upstream block with the Unix domain socket as the only entry. Then setup Nginx to reverse proxy to the created upstream block.
upstream fries_upstream {
server unix:/tmp/fries.com.socket;
}
server {
listen 80;
server_name www.fries.com;
root /webapps/fries.com/public;
location / {
proxy_pass http://fries_upstream;
}
}
It should be noted that Phusion Passenger for Apache and Phusion Passenger for Nginx already use Unix domain sockets internally for optimal performance. In fact we’ve done this since version 1.0. We plan on elaborating more about our internal technologies in a future blog post.
Conclusion
Those of you who are familiar with Mongrel and Thin will see the similarity. Indeed, Phusion Passenger Standalone was designed to be able to used in a reverse proxy environment such as the one demonstrated in this article. Unlike Mongrel and Thin clusters however you only need a single Phusion Passenger Standalone instance per web application and thus only a single address to proxy to. Phusion Passenger Standalone will take care of starting and stopping application processes for you and will make sure processes are restarted when they crash.
more »
Phusion Passenger 3.0.0 public beta 3 released »
Created at: 20.09.2010 20:13, source: Phusion Corporate Blog, tagged: Phusion Passenger Software
What’s new
- More RVM issues fixed
- A lot of people who happen to use RVM have reported various problems. Some of the symptoms include:
- The spawn server crashes during startup.
- Phusion Passenger Standalone prints ‘command not found’ errors.
It turned out that these problems occur when one has an older RVM version installed. Phusion Passenger depends on features provided by relatively new RVM versions. We’ve added sanity checks in Phusion Passenger so that it warns you if it detects an old RVM installation.
You can upgrade your RVM installation by running these commands:
rvm update --head rvm reload rvm repair all
We’ve also fixed support for system-wide RVM installs.
- Aggressively checks for permissions
- Many problems that people report on the Phusion Passenger discussion board are actually caused by wrong permissions set on the application files or on one of the parent directories. We’ve added aggressive permission checking code in Phusion Passenger. If any permissions are wrong then it will tell the user exactly which directory has wrong permissions and how to fix it. This should make Phusion Passenger a lot more fail-proof than before.
- Fixed some more compilation problems
- These problems occur on some systems but not on others.
- Fixed passenger-status crash
- When passenger-status tries to tell the user that it needs to be run as root, it used to crash instead because of a typo.
- Phusion Passenger Standalone checks for GNU make on FreeBSD
- Phusion Passenger Standalone depends on the GNU version of make in order to be able to show a compilation progress bar.
Installation/upgrade
First install the latest Phusion Passenger gem:
gem install passenger --pre
(Or you can download the tarball.)
If you want to install or upgrade the Apache or Nginx version, then run the installer as you’re used to:
passenger-install-apache2-module passenger-install-nginx-module
At the end the installer will tell you to paste a configuration snippet. If you’re upgrading then replace the old snippet with the new one.
If you want to run Phusion Passenger Standalone, then run:
cd /path-to-your-app passenger start
No special upgrade instructions needed.
The documentation
Users guide for Apache
Users guide for Nginx
Users guide for Standalone
more »


