Run Rails 3 Apps on Passenger

Update: Make sure you update Rubygems using sudo gem update --system.

Whilst I’ve been learning more about Rails 3, I’ve been using the built in rails server to run my code. Today I tried to run my Rails 3 app through Passenger on Apache, and immediately hit an error page:

textuninitialized constant Rack::Runtime

It turns out that Passenger notices Rails’ new file, causing it to run as a Rack application. This requires a slight change in the app’s VirtualHost entry. The RailsEnv setting now becomes RackEnv:

```apache# /etc/apache2/apache2.conf

RailsEnv development

RackEnv development```

But that wasn’t all. My development machine was still running Passenger 2.2.7, which wouldn’t support Rails 3. To ensure a clean slate, I removed the old versions of Passenger and installed the latest build (2.2.11 at the time of writing). Once installed, I ran the standard Passenger installation script and updated apache2.conf:

```bash$ sudo gem update –system

$ sudo gem uninstall passenger

# Remove all versions of Passenger

$ sudo gem install passenger

$ sudo passenger-install-apache2-module```

```apache# /etc/apache2/apache2.conf

Passenger mod_rails

NOTE: Your paths may be different. Use the config generated by Passenger’s install script)

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.11/ext/apache2/

PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.11

PassengerRuby /usr/bin/ruby1.8

RailsEnv development

RackEnv development```

After a quick restart of Apache, Passenger kicked in and my new Rails 3 app was up and running!


March 5, 2010