在Rails 2.3中.x、 您可以这样覆盖render_optional_error_file:

# ApplicationController.rb
protected
  def render_optional_error_file(status_code)
    render :template => "errors/500", :status => 500, :layout => 'application'
  end

然而,Rails 3不再有render_optional_error_file个.相反,您需要覆盖rescue_action_in_public,您可以这样做:

# 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

这是可行的,但不使用应用程序的布局.但是,如果您这样指定布局路径:

body = template.render(:file => file, :layout => "layouts/application") # line 15

你得了Error during failsafe response: ActionView::Template::Error分.

申请表第4行.html.雇员再培训局:4是:

<%= stylesheet_link_tag "app", "jquery-ui", "jquery.fancybox", :cache => "all" %>

ActionView通常用于呈现模板的任何内容都无法加载.

堆栈跟踪是:

  /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'

推荐答案

在rails 3.2中,它比这更简单:

将此添加到config/application.rb:

config.exceptions_app = self.routes

这会导致错误通过路由路由.然后再加上config/routes.rb:

match "/404", :to => "errors#not_found"

我从JoséValim的博客文章"My five favorite hidden features in Rails 3.2"中的第#3项获得了这一信息.

Ruby-on-rails相关问答推荐

用至少一个缺省值初始化Ruby数组的最简洁方法是什么?

为什么这个rails Collection_select不呈现关联属性?

我使用rbenv安装Ruby,但我在使用";gem";->;错误:执行gem时遇到此错误.(Errno::EACCES)权限被拒绝

Puma 工作人员无法在 Ubuntu 20.04 VM 上的 Rails 5.2 中启动

带有块捕获的 FormBuilder 辅助方法在 ERB 中不起作用

刺激不添加侦听器以搜索表单输入

有没有一种简单的方法可以让 pow 为 https 服务?

向现有控制器添加操作(Ruby on Rails)

您将如何在 Ruby on Rails 应用程序中使用 rSpec 测试观察者?

jbuilder vs rails-api/active_model_serializers 用于 Rails 4 中的 JSON 处理

判断 DateTime 值是今天、明天还是以后

fields_for 表单构建器对象为零

从控制器中删除 Cookie

设计和强大的参数

是否有与 PHP 的 isset() 等效的 Rails?

如何在rails中异步加载部分页面

我们如何在 Rails Mailer 中设置邮箱发件人的名称?

获取完整的 rails 控制器名称,包括命名空间

在 Rails 4.1 中,如何通过枚举符号查找记录?

在 El Capitan 上安装 Nokogiri (1.6.7) 时出错