Phusion Passenger is software with which one can deploy Ruby web applications on the Apache or Nginx web server. Now, with the release of version 3.0.0 beta 1, it also comes with a standalone version that does not require an external web server. Please read http://www.modrails.com/ for details.

In the past period we’ve blogged extensively about the progress of Phusion Passenger 3. Many exciting changes have been introduced. It’s been a long ride, but today we are happy to announce the first Phusion Passenger 3 public beta! We’ve already tested Phusion Passenger 3 extensively in private, and now we’re giving the community a chance to test it as well in order to make the final release rock-solid.

We’ve received a lot of emails from people who are excited about Phusion Passenger 3. Thank you all for your support!

Except for mass deployment, all features described in the technology previews are available as open source in Phusion Passenger 3. A few more changes have been made since the last Technology Preview:

The ‘PassengerPreStart’ option

In Technology Preview 4 we described PassengerMinInstances. That option ensures that, at least x instances will be kept around once they’ve been spawned, but it does not ensure that instances are immediately spawned up during web server start. Instead we have a separate configuration option for that, called PassengerPreStart. PassengerPreStart and PassengerMinInstances and the reason why they’re separate configuration options are described extensively in the manual.

RVM support

RVM is becoming more and more popular. Previous versions of Phusion Passenger work fine with RVM, but one has to follow special installation instructions for it to work properly. We’ve noticed that many users are not aware of this and as a result couldn’t get Phusion Passenger working properly with RVM. In Phusion Passenger 3 we’ve collaborated with Wayne E. Seguin and added special support for RVM so that everything should work out-of-the-box, without special installation instructions.

Other minor changes

For completeness, here are a list of minor changes that have not been described in the Technology Previews so far:

Nginx is now compiled with SSL support by default.

Nginx can now be compiled on a noexec /tmp filesystem. Fixes bug #380.

The PassengerFriendlyErrorPages option has been added. This allows you to turn off the friendly error pages that Phusion Passenger normally displays in the event of an error, so that only a standard 500 error page is shown. This is documented in the manual.

The PassengerDebugLogFile option has been added. This is documented in the manual.

User switching support has been made more flexible through the PassengerUser, PassengerGroup, PassengerDefaultUser and PassengerDefaultGroup options. These are documented in the manual.

RailsSpawnMethod has been renamed to PassengerSpawnMethod because we now support smart spawning for Rack apps as well.

passenger-install-apache2-module and passenger-install-nginx-module can now be run concurrently without the one deleting files compiled by the other.

#at_exit blocks are now called during application process shutdown.

passenger-install-apache2-module now supports a –snippet option. When this option is given, the command outputs the Apache configuration snippet that should be pasted, but doesn’t do anything else.

Temporary files that Phusion Passenger places in /tmp are touched every 6 hours. This prevents /tmp cleaner daemons that are present on many systems from deleting these temp files that are essential for Phusion Passenger’s functioning. Bug #365.

Install

Installation is almost the same as Phusion Passenger 2. Type:

gem install passenger --pre

If you want to install the Apache or Nginx version, then run the installer as you’re used to:

The documentation

Things to come

Although Phusion Passenger 3.0 brings many exciting improvements, it is only the beginning. In parallel to Phusion Passenger 3, we have been working on some interesting things which we plan to reveal to the world shortly after the release of Phusion Passenger 3.0. Please stay tuned for future developments.

This is great news! Just tried passenger standalone on my mac and it works great.

I’ve found a small buglet: passenger standalone doesn’t echo any STDERR output to the console. My app uses a StdErrOutputter from log4r that helps me see the log output in development mode without having to explicitly tail the logs.

But STDERR seems to be ignored when running under passenger standalone.

Great work all around on passenger, can’t wait for the 3.0 stable release!

Been staring at your RSS feed every morning waiting for this announcement. Thanks!

Paul Bowsher

I was initially going to ask about rvm multi-ruby support, but I guess one way around this now is to use a passenger standalone and bind it to a socket, then use nginx normally to proxy onto the standalone instance. A LOT less nginx configuration as you can hand off the entire request to the standalone instance and not worry about different asset rules.

Mark Mulder

Great stuff! However I can’t find PassengerDebugLogFile described in the manual anywhere…

Hongli, RE rvm, I assume you are talking about the RVM ruby and gemset that was active when _passenger_ was installed, right? Have you considered/it is possible to allow some kind of per-app setting for which RVM ruby/gemset to use?

Is smart spawning also available for the standalone passenger start? When I touch tmp/restart.txt it still takes a while for a new request to get served.

rofh

Hey, I have somewhat similar output as Hermino, but due to uname behaviour. You’re using uname -p as default, with failover to uname -m, but my uname -p outputs “Intel(R) Pentium(R) M processor 1400MHz” instead of something like i686, changed it to just use uname -m and it worked ok.

Now I don’t really know uname behaviour under different unixes, but as I tried in Linux and FreeBSD, uname -m could be just fine as the default, what do you think? ( probably I’m wrong though ).

Or you just could work on escaping, for it’s a thing people expect to just work ( my error was due to unescaped ‘(‘ ).

Are settings like PassengerPreStart and PassengerMinInstances coming to nginx as well? I can only see them in the Apache manual, I’ll excuse myself beforehand if this is in the nginx version already but just not updated in the docs just yet.

I went to the path of the source code to ngix
run the same configure command from the error of passenger start
and run the make and sudo make install.
then went the way of my rails project
and run passenger start e done

@Wilker: It will be one of the features we’re reserving for the premium version. More on this and the other awesome features that we’ve got in store for that version will be announced in the very near future. They’re nothing short than jawdropping we believe.

I’m having the same issue @luis is having, using gemsets, when I run the application and go to localhost:3000 for the first time, it fires an error saying it does not find some gem. If I install the gem in the default env, not the gemset, it finds it and explodes in another missing gem. So it seems it’s not loading the current gemset.

“Phusion” and “Phusion Passenger” are registered trademarks of Phusion. “Rails”, “Ruby on Rails” and the Rails logo are registered trademarks of David Heinemeier Hansson. All other trademarks are property of their respective owners.