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 config.ru 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
:
# /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```
```apacheconf
# /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/mod_passenger.so
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!
### References
* [Rails 3 and Passenger](http://cakebaker.42dh.com/2010/01/17/rails-3-and-passenger/)
* [Rails Lighthouse Ticket](https://rails.lighthouseapp.com/projects/8994/tickets/3917-uninitialized-constant-rackruntime-error)
👋 Thanks for reading - I hope you enjoyed this post. If you find it helpful and want to support further writing and tutorials like this one, please consider supporting my work with a coffee!
Support ☕️