Hi all,
I was just wondering if this is the intended behavior. Here is my setup:
controller
def index
respond_to do |f|
f.xml { render :xml => true }
f.html { render :layout => :none }
end
end
In my views I have a file for each type
index.herb
index.xerb
The first request I send is cached and interferes with the other one.
For example, if I send an xml request first, followed by html, here is
what I see (those are just some debug statements I put in to follow
the code)
Request 1 "Accept: text/xml"
- "starting find_template, options are :"
{:action=>"index", :ext=>"rxml,xerb,builder"}
- match on elsif action
path is : /Users/dusty/nms/app/views/testing/index
- no cache, created glob
glob is : /Users/dusty/nms/app/views/testing/index.{rxml,xerb,builder}
- searched Dir[glob].first and found
found is : /Users/dusty/nms/app/views/testing/index.xerb
- finished find_template, template is:
"/Users/dusty/nms/app/views/testing/index.xerb"
Request 2 "Accept: text/html"
- "starting find_template, options are :"
{:action=>"index"}
- match on elsif action
path is : /Users/dusty/nms/app/views/testing/index
- finish else, matched cached
cached is : /Users/dusty/nms/app/views/testing/index.xerb
- finished find_template, template is:
"/Users/dusty/nms/app/views/testing/index.xerb"
If I restart merb and reverse the order
Request 1 "Accept: text/html"
- "starting find_template, options are :"
{:action=>"index"}
- match on elsif action
path is : /Users/dusty/nms/app/views/testing/index
- no cache, created glob
glob is :
/Users/dusty/nms/app/views/testing/index.{html.erb,jerb,herb,haml,mab,js.erb,xerb,rhtml,builder,rxml,erb}
- searched Dir[glob].first and found
found is : /Users/dusty/nms/app/views/testing/index.herb
- finished find_template, template is:
"/Users/dusty/nms/app/views/testing/index.herb"
Request 2 "Accept: text/xml"
- "starting find_template, options are :"
{:action=>"index", :ext=>"rxml,xerb,builder"}
- match on elsif action
path is : /Users/dusty/nms/app/views/testing/index
- finish else, matched cached
cached is : /Users/dusty/nms/app/views/testing/index.herb
- finished find_template, template is:
"/Users/dusty/nms/app/views/testing/index.herb"
* this caught me by suprise, it searched for layouts too.
- "starting find_template, options are :"
{:layout=>"testing"}
- match on elsif _layout
path is : /Users/dusty/nms/app/views/layout/testing
- no cache, created glob
glob is :
/Users/dusty/nms/app/views/layout/testing.{html.erb,jerb,herb,haml,mab,js.erb,xerb,rhtml,builder,rxml,erb}
- failed Dir[glob].first and set @merb_unmatched:
glob is :
/Users/dusty/nms/app/views/layout/testing.{html.erb,jerb,herb,haml,mab,js.erb,xerb,rhtml,builder,rxml,erb}
- "starting find_template, options are :"
{:layout=>:application}
- match on elsif _layout
path is : /Users/dusty/nms/app/views/layout/application
- no cache, created glob
glob is :
/Users/dusty/nms/app/views/layout/application.{html.erb,jerb,herb,haml,mab,js.erb,xerb,rhtml,builder,rxml,erb}
- searched Dir[glob].first and found
found is : /Users/dusty/nms/app/views/layout/application.html.erb
So, I suppose that the EASY workaround is to rename my xml template to
something like index_xml.xerb and then call it like:
render :xml => :index_xml
I was just wondering if that was the intended behavior, that''s all.
The documentation threw me off for a second there because of this
line.
# render :xml => true
# render :xml => true, :action => "buffalo"
#
# Renders the buffalo.xerb template for the current controller.
So, render :xml => true, does work out of the box. But, if you have
an another view with the same name before the extension, they
interfere with eachother. It this is intended, then I''ll supply a
little documentation patch to warn about that.
Thanks
Dusty Doris
Ezra Zygmuntowicz
2007-Sep-29 16:21 UTC
templates with same name before extension are cached
This is an artifact of some overly clever caching of the globbed templates. I will fix this when i get back home tomorrow. Thanks -Ezra On Sep 29, 2007, at 9:14 AM, Dusty Doris wrote:> Hi all, > > I was just wondering if this is the intended behavior. Here is my > setup: > > controller > > def index > respond_to do |f| > f.xml { render :xml => true } > f.html { render :layout => :none } > end > end > > In my views I have a file for each type > > index.herb > index.xerb > > The first request I send is cached and interferes with the other one. > For example, if I send an xml request first, followed by html, here is > what I see (those are just some debug statements I put in to follow > the code) > > Request 1 "Accept: text/xml" > > - "starting find_template, options are :" > {:action=>"index", :ext=>"rxml,xerb,builder"} > - match on elsif action > path is : /Users/dusty/nms/app/views/testing/index > - no cache, created glob > glob is : /Users/dusty/nms/app/views/testing/index. > {rxml,xerb,builder} > - searched Dir[glob].first and found > found is : /Users/dusty/nms/app/views/testing/index.xerb > - finished find_template, template is: > "/Users/dusty/nms/app/views/testing/index.xerb" > > Request 2 "Accept: text/html" > > - "starting find_template, options are :" > {:action=>"index"} > - match on elsif action > path is : /Users/dusty/nms/app/views/testing/index > - finish else, matched cached > cached is : /Users/dusty/nms/app/views/testing/index.xerb > - finished find_template, template is: > "/Users/dusty/nms/app/views/testing/index.xerb" > > If I restart merb and reverse the order > > Request 1 "Accept: text/html" > > - "starting find_template, options are :" > {:action=>"index"} > - match on elsif action > path is : /Users/dusty/nms/app/views/testing/index > - no cache, created glob > glob is : > /Users/dusty/nms/app/views/testing/index. > {html.erb,jerb,herb,haml,mab,js.erb,xerb,rhtml,builder,rxml,erb} > - searched Dir[glob].first and found > found is : /Users/dusty/nms/app/views/testing/index.herb > - finished find_template, template is: > "/Users/dusty/nms/app/views/testing/index.herb" > > Request 2 "Accept: text/xml" > > - "starting find_template, options are :" > {:action=>"index", :ext=>"rxml,xerb,builder"} > - match on elsif action > path is : /Users/dusty/nms/app/views/testing/index > - finish else, matched cached > cached is : /Users/dusty/nms/app/views/testing/index.herb > - finished find_template, template is: > "/Users/dusty/nms/app/views/testing/index.herb" > > * this caught me by suprise, it searched for layouts too. > > - "starting find_template, options are :" > {:layout=>"testing"} > - match on elsif _layout > path is : /Users/dusty/nms/app/views/layout/testing > - no cache, created glob > glob is : /Users/dusty/nms/app/views/layout/testing. > {html.erb,jerb,herb,haml,mab,js.erb,xerb,rhtml,builder,rxml,erb} > - failed Dir[glob].first and set @merb_unmatched: > glob is : /Users/dusty/nms/app/views/layout/testing. > {html.erb,jerb,herb,haml,mab,js.erb,xerb,rhtml,builder,rxml,erb} > - "starting find_template, options are :" > {:layout=>:application} > - match on elsif _layout > path is : /Users/dusty/nms/app/views/layout/application > - no cache, created glob > glob is : /Users/dusty/nms/app/views/layout/application. > {html.erb,jerb,herb,haml,mab,js.erb,xerb,rhtml,builder,rxml,erb} > - searched Dir[glob].first and found > found is : /Users/dusty/nms/app/views/layout/application.html.erb > > So, I suppose that the EASY workaround is to rename my xml template to > something like index_xml.xerb and then call it like: > > render :xml => :index_xml > > I was just wondering if that was the intended behavior, that''s all. > The documentation threw me off for a second there because of this > line. > > # render :xml => true > # render :xml => true, :action => "buffalo" > # > # Renders the buffalo.xerb template for the current controller. > > So, render :xml => true, does work out of the box. But, if you have > an another view with the same name before the extension, they > interfere with eachother. It this is intended, then I''ll supply a > little documentation patch to warn about that. > > Thanks > Dusty Doris > _______________________________________________ > Merb-devel mailing list > Merb-devel at rubyforge.org > http://rubyforge.org/mailman/listinfo/merb-devel-- Ezra Zygmuntowicz -- Founder & Ruby Hacker -- ez at engineyard.com -- Engine Yard, Serious Rails Hosting -- (866) 518-YARD (9273)