Hi Nathan, The problem is that mongrel is serving the static file long before rails knows anything about it.
e.g. As I mention in the patch, you have a web server setup with multiple virtual hosts each mapped to a separate doc root. example.com => /var/www/apps/example.com/public es.example.com => /var/www/apps/example.com/public/es Rails is using page caching and the cache is clean. 1st request: http://example.com => 1. web server looks for /var/www/apps/example.com/public/index.html 2. passes request to mongrel which does the same thing, doesn't find it and calls rails to render it. 3. Now /var/www/apps/example.com/public/index.html exists as was cached by rails. 2nd request: http://es.example.com => 1. web server looks for /var/www/apps/example.com/public/es/index.html 2. passes request to mongrel which looks for /var/www/apps/example.com/ public/index.html (which unlike the web server, has only one doc root), finds the file under /var/www/apps/example.com/public/index.html (from the previous request) and serves that back before rails has even got a chance to know about it. It has served the wrong file. I hope this example makes it clearer. With the ability to force mongrel to forward all requests it receives to rails, on the second request rails (using the host info) would then cache the index.html file into /var/www/apps/example.com/public/es/ index.html. As I was writing this, I just thought of another possibility being writing a custom mongrel handler, but as mongrel_rails is a handler itself, it seems a bit pointless so I still think my patch has merits. Thoughts? Regards, Saimon On Jan 24, 2008, at 4:42 PM, Nathan Vack wrote: > On Jan 24, 2008, at 6:13 AM, Saimon Moore wrote: > >> Hi all, >> >> I've just added a patch that I'd appreciate some feedback on: >> >> http://rubyforge.org/tracker/index.php? >> func=detail&aid=17446&group_id=1306&atid=5147 > > I'll admit by cold-addled brain isn't following logic perfectly this > morning, but I feel like this really would be better handled by the > upstream HTTP handler giving enough information to your app so it > serves the right cached file (or runs the right controller, or > whatever). > > I think passing the Host: header along with the request_routing > plugin (assuming you're on Rails) will make everything happy: > > http://agilewebdevelopment.com/plugins/request_routing > > Or am I missing something? > > -Nate > _______________________________________________ > Mongrel-users mailing list > [email protected] > http://rubyforge.org/mailman/listinfo/mongrel-users -- Saimon Moore Freelance Web Developer (Available for hire - For details visit http://saimonmoore.net) Skype: saimonmoore Yahoo IM: saimonmoore Google IM: saimonmoore _______________________________________________ Mongrel-users mailing list [email protected] http://rubyforge.org/mailman/listinfo/mongrel-users
