Rails自定义错误页面不会在Nginx上呈现

时间:2016-10-03 19:38:54

标签: ruby-on-rails ruby nginx

我是Rails和Nginx的新手。我被要求在我们的应用程序中添加自定义错误页面。我在这个网站上找到了这样做的说明,我的自定义错误页面在本地渲染得很好。当我转到网址/no_such_page时,我会看到相应的页面。当我将代码部署到运行nginx的测试服务器并尝试相同的url时,我会看到以下内容:

  

500内部服务器错误   如果您是本网站的管理员,请阅读此Web应用程序的日志文件和/或Web服务器的日志文件,以了解出现了什么问题。

在nginx服务器上,如果我转到网址\404,那么我确实会看到我的网页,所以我知道它呈现正常。 我的本地计算机和服务器都在development环境下运行。

我已将此添加到config\development.rb

config.consider_all_requests_local = false
config.exceptions_app = self.routes

以下是我添加到routes.rb的内容:

%w(404 500).each do |code|
    get code, to: "errors#show", :code => code, :via => :all
end

我的errors_controller看起来像这样:

class ErrorsController < ApplicationController
    def show
        status_code = params[:code] || 500
        render status_code.to_s
    end
end

有没有人知道我的nginx配置中是否需要做一些特殊工作才能使其正常工作?

1 个答案:

答案 0 :(得分:2)

  

500内部服务器错误如果您是本网站的管理员,请阅读此Web应用程序的日志文件和/或Web服务器的日志文件,以了解出现了什么问题。

此错误消息来自Rails本身,而不是来自Nginx。

https://github.com/rails/rails/blob/v5.0.0.1/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L15-L22

这意味着您的自定义错误页面本身会引发异常,这会导致无限循环错误 - >显示错误页面 - &gt;错误 - >显示错误页面 - &gt; ... Rails检测到此并停止显示您看到的错误消息。检查日志中的字符串以查看错误:

Error during failsafe response: