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

Reply via email to