Hello Mike,
Mod_passenger is failing with: uninitialized constant
Rack::Session::Abstract::SessionHash.
The same issue has been driving mad all day today but I think I've finally cracked it.
Are you by any chance using Ubuntu with passenger installed as a package? If so, you might notice a rack 1.1 Ubuntu package by doing 'dpkg -l |grep rack'.
You might ALSO notice that rack 1.1 and passenger are installed in '/usr/lib/ruby/1.8', that is to say alongside Ruby's StdLib, and not in GEM_HOME '/usr/lib/ruby/gems/1.8/gems/' which is where they should be.
What happens is that passenger correctly assumes that your Rails app is a normal Rack app, and proceeds to load config.ru using rack 1.1 that the Ruby interpreter loads during its startup alongside StdLib.
Rubygems however, reports to bundler that rack 1.3 is indeed available in GEM_HOME, because it is, and as such bundler doesn't complain about the fact that 1.1 is loaded but 1.3 is reported as available.
Rails 3.1.rc4, BTW, requires rack 1.3, not master.
You can check which version of rack is reported in irb for the user you run passenger under...
$ irb
> require 'rubygems'; require 'rack'; Rack.release
"1.3"
I bet it doesn't say "1.3" in your case.
DISCLAIMER: 95% of my conclusion is a result of my investigation and subsequent solution of my problem. The remaining 5%, about how bundler and Rubygems get their knickers in a twist because of the Ubuntu packaging 'guidelines', is an extrapolation. I didn't spend any time with the debugger stepping through Bundler and Rubygems source; I am not that patient.
Finally, I know this issue is not Rails-core specific, but my reply might help other people who come upon this thread...
-christos