Rails 2.3 really checks for presence of $RAILS_ROOT/public/index.html

Just sharing a Rail 2.3.2 upgrade experience. My app was running on
2.1.1 before I upgraded.

Most things worked but I could not get my default route in routes.rb
to work. The default route URL was “/”. I had a route like this in
routes.rb as the very last route:

map.connect “”, :controller => “foo”, :action => “bar”

So users who went to the base URL would be directed to the foo
controller.

This stopped working with Rails 2.3.2 and I wasted half a day figuring
out what was wrong. Turns out, I just needed to delete public/
index.html. That’s it. The same route works perfectly after deleting
that file.

There is a comment in the Rails code which mentions this but I don’t
see it in the documentation for Rails routes.

On 21 Mar., 01:28, Sudhir [email protected] wrote:

controller.

This stopped working with Rails 2.3.2 and I wasted half a day figuring
out what was wrong. Turns out, I just needed to delete public/
index.html. That’s it. The same route works perfectly after deleting
that file.

There is a comment in the Rails code which mentions this but I don’t
see it in the documentation for Rails routes.

On 21 Mar., 01:28, Sudhir [email protected] wrote:

controller.

This stopped working with Rails 2.3.2 and I wasted half a day figuring
out what was wrong. Turns out, I just needed to delete public/
index.html. That’s it. The same route works perfectly after deleting
that file.

There is a comment in the Rails code which mentions this but I don’t
see it in the documentation for Rails routes.

As far as I know your web server will always look in the /public
directory to see if any files matches the request, if not it will pass
the request on to the app server. So this really shouldn’t have worked
before either…

And by the way, you usually use map.root to make a route that matches
a request to the root:

map.root :controller => “foo”, :action => “bar”


Cheers,
David K.
http://twitter.com/rubyguy