We're happy to announce version 5.0.1 of the Phusion Passenger application server for Ruby, Python and Node.js. The 5.x series is also unofficially known under the codename "Raptor", and introduces many major improvements such as:

Much better performance

A new HTTP JSON API for better insights into server and application behavior

Better logging

Better WebSocket support

You can learn all about the new changes in Passenger 5 in the following blog posts:

Version 5.0.1 is officially ready for production.

The changes since release candidate 2 are as follows:

The passenger-config restart-app command is now more user friendly. When run in a terminal, it will show an interactive menu, allowing you to select the app to restart. Closes GH-1387.

command is now more user friendly. When run in a terminal, it will show an interactive menu, allowing you to select the app to restart. Closes GH-1387. Fixed a crash bug in the handling of sticky session cookies.

Log failed program in error message, not its command line (contributed by: paisleyrob). Closes GH-1397.

[Nginx] Fixes cases in which Passenger overrides the Nginx handler function even when it shouldn't, for example when Passenger is disabled. Closes GH-1393.

[Enterprise] The sticky_sessions and envvars options in Passengerfile.json is now also supported in mass deployment mode.

Phusion Passenger also has an Enterprise version which comes with a wide array of additional features such as zero-downtime restarts, multithreading, better debugging support, etc.

Passenger Enterprise has been updated as well. All the changes you learned about in this article, are also available in the Enterprise version.

By buying Phusion Passenger Enterprise you will directly sponsor the development of the open source version.

Learn more about Passenger Enterprise »

Installing or upgrading to 5.0.1

Upgrade notes

Passenger 5 is mostly compatible with Passenger 4, but there are a few minor things which have changed in an incompatible way. Please take heed of these during upgrading.

Full web server restart required

After upgrading to Passenger 5, you must fully restart the web server in order to finish the upgrade.

On Apache, you must apachectl stop and apachectl start . An apachectl reload or even apachectl restart is not enough.

If you upgraded using APT, you must invoke the web server restart manually. APT does not do this for you!

If you do not restart the web server, then you will end up in a broken state where half of Passenger 4 is running, and half of Passenger 5.

Minimum Rails version is now 2.3

We've dropped support for Rails version older than 2.3. If you still have Rails 1.x or 2.0-2.2 apps, please use Passenger 4.

To make Rails 2.3 apps work with Passenger 5, the app must have a config.ru file. Here's how a config.ru looks like for Rails 2.3 apps:

# Require your environment file to bootstrap Rails require ::File.dirname(__FILE__) + '/config/environment' # Serve static assets from RAILS_ROOT/public directory # use Rails::Rack::Static # Dispatch the request run ActionController::Dispatcher.new

Restart mechanism changed

Using restart.txt to restart the app is still supported, but with the new default settings, Passenger won't notice any changes until after max 10 seconds. We recommend you to use the passenger-config restart-app command. But if you want to revert to the old restart.txt behavior (where any change is noticed immediately on the next request), set PassengerStatThrottleRate / passenger_stat_throttle_rate to 0.

Feature and configuration changes

If you use out-of-band garbage collection, beware that the X-Passenger-Request-OOB-Work header has now been renamed to !~Request-OOB-Work .

header has now been renamed to . When using Rack's full socket hijacking, you must now output an HTTP status line.

[Nginx] The passenger_set_cgi_param option has been removed and replaced by passenger_set_header and passenger_env_var .

option has been removed and replaced by and . [Nginx] passenger_show_version_in_header is now only valid in the http context.

is now only valid in the context. [Nginx] The passenger_enabled on directive is now inherited across location blocks. This wasn't the case previously, so you had to re-specify it inside location blocks. Now the opposite holds: if you specified passenger_enabled on in the server block, then you have to explicitly specify passenger_enabled off in all location blocks where you disabled Passenger.

directive is now inherited across location blocks. This wasn't the case previously, so you had to re-specify it inside location blocks. Now the opposite holds: if you specified in the server block, then you have to explicitly specify in all location blocks where you disabled Passenger. [Apache] The PassengerStatThrottleRate option is now global.

option is now global. The minimum required Nginx version is now 1.6.0.

The passenger_temp_dir option (Nginx) and the PassengerTempDir option (Apache) have been replaced by two config options. On Nginx they are passenger_instance_registry_dir and passenger_data_buffer_dir . On Apache they are PassengerInstanceRegistryDir and PassengerDataBufferDir . On Apache, PassengerUploadBufferDir has been replaced by PassengerDataBufferDir .

option (Nginx) and the option (Apache) have been replaced by two config options. On Nginx they are and . On Apache they are and . On Apache, has been replaced by . [Standalone] The Phusion Passenger Standalone config template has changed. Users are encouraged to update it.

[Standalone] passenger-standalone.json has been renamed to Passengerfile.json .

has been renamed to . [Standalone] passenger-standalone.json / Passengerfile.json no longer overrides command line options. Instead, command line options now have the highest priority.

Passenger 4 APT repository

Our main APT repository only contains Passenger 5 now. Those who wish to remain on Passenger 4 for the time being should use our Passenger 4 APT repository.