In Rails 2.3.x, you can override render_optional_error_file like so:
# ApplicationController.rb
protected
def render_optional_error_file(status_code)
render :template => "errors/500", :status => 500, :layout
=> ''application''
end
However, Rails 3 no longer has render_optional_error_file. Instead, you need to
overriderescue_action_in_public, which I do:
# config/initializers/error_page.rb
module ActionDispatch
class ShowExceptions
protected
def rescue_action_in_public(exception)
status = status_code(exception).to_s
template = ActionView::Base.new(["#{Rails.root}/app/views"])
if ["404"].include?(status)
file = "/errors/404.html.erb"
else
file = "/errors/500.html.erb"
end
body = template.render(:file => file)
render(status, body)
end
end
end
This works, but does not use the application''s layout. However, if you
specify the layout path:
body = template.render(:file => file, :layout =>
"layouts/application") # line 15
I get an Error during failsafe response: ActionView::Template::Error.
Line 4 of application.html.erb:4 is:
<%= stylesheet_link_tag "app", "jquery-ui",
"jquery.fancybox", :cache => "all" %>
Whatever ActionView normally uses to render templates isn''t getting
loaded.
The stack trace is:
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:794:in
`join''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:794:in
`rails_asset_id''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:817:in
`rewrite_asset_path''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:746:in
`compute_public_path''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:424:in
`path_to_stylesheet''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:875:in
`ensure_stylesheet_sources!''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:874:in
`each''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:874:in
`ensure_stylesheet_sources!''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/helpers/asset_tag_helper.rb:512:in
`stylesheet_link_tag''
/data/sites/fundraisers-stage/releases/20110316194843/app/views/layouts/application.html.erb:4:in
`_app_views_layouts_application_html_erb___19482063_70294907435920_0''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/template.rb:135:in
`send''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/template.rb:135:in
`render''
/var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb:54:in
`instrument''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/template.rb:127:in
`render''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/render/layouts.rb:80:in
`_render_layout''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/render/rendering.rb:62:in
`_render_template''
/var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb:52:in
`instrument''
/var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications/instrumenter.rb:21:in
`instrument''
/var/lib/gems/1.8/gems/activesupport-3.0.5/lib/active_support/notifications.rb:52:in
`instrument''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/render/rendering.rb:56:in
`_render_template''
/var/lib/gems/1.8/gems/actionpack-3.0.5/lib/action_view/render/rendering.rb:26:in
`render''
/data/sites/fundraisers-stage/releases/20110316194843/config/initializers/error_pages.rb:15:in
`rescue_action_in_public''
How can I get this to render my application layout?
Paul
Nagachaitanya Vellanki
2011-Mar-22 17:49 UTC
Re: Help overriding rescue_action_in_public in Rails 3
please try specifying layout at the top of the controller like layout ''application'', :only => action_name Please refer to the rails documentation, there are other options like :except, if this helps -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.