【问题标题】:Rails custom error pages won't render on NginxRails 自定义错误页面不会在 Nginx 上呈现
【发布时间】:2016-10-03 19:38:54
【问题描述】:

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

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

在 nginx 服务器上,如果我转到 url \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 配置中做一些特别的事情来完成这项工作?

【问题讨论】:

    标签: ruby-on-rails ruby nginx


    【解决方案1】:

    500 Internal Server Error 如果您是本网站的管理员,请阅读此 Web 应用程序的日志文件和/或 Web 服务器的日志文件以找出问题所在。

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

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

    这意味着您的自定义错误页面本身引发了异常,这将导致错误的无限循环->显示错误页面->错误->显示错误页面->... Rails 检测到这一点并停止您看到的错误消息。检查你的日志中是否有这个字符串,看看错误是什么:

    Error during failsafe response:
    

    【讨论】:

    • 谢谢马特!我想我被它在本地而不是在服务器上工作的事实所吸引,所以我责怪 nginx。我在var/log/nginx 中找到了我的错误日志,它指出了我忽略的东西。现在一切就绪。
    猜你喜欢
    • 2013-03-27
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多