Phusion Passenger:自定义内部乘客错误,同时仍然传递 Rails 错误

问题描述 投票:0回答:2

我希望将普通的 Rails 错误页面传递给用户代理。我当然可以使用普通的 Rails 技术自定义这些页面。

但是如果存在内部乘客错误(通常是乘客根本无法启动应用程序),我想自定义该页面。有什么办法可以做到吗?

如果我(apache)将 PassengerErrorOverride 设置为打开,那么我可以在 apache 端配置内部乘客错误页面 - 但我认为我也会丢失所有自定义的普通 Rails 错误页面。

有什么方法可以让我的自定义 Rails 错误页面主体保持正常运行,但仍以某种方式自定义内部 Passenger 致命错误屏幕?

谢谢!

ruby passenger
2个回答
2
投票

让我们看看我的理解是否正确。例如,如果向用户提供 HTTP 500 错误页面,则该页面可能来自三个不同的来源:

  1. 您的 Rails 应用程序(通常)
  2. 乘客(可能很少,例如生成错误)
  3. Apache(覆盖 1. 和 2.)

您希望用户获得:1.+(由您定制)2.

覆盖 2. 的默认方法确实是使用选项 3.,但这也会覆盖 1.,这是您不想要的。

我认为 Passenger 中目前没有另一个选项可以覆盖 2.,但您可以覆盖 Passenger 使用的模板。如果友好错误页面设置为关闭,模板为:

`passenger-config about resourcesdir`/templates/undisclosed_error.html.template

0
投票

我最终为此编写了一个自定义 Capistrano 任务。

namespace :deploy do
  task :modify_passenger_error_page do
    on roles(:app) do
      file_path = "$(passenger-config about resourcesdir)/templates/error_renderer/without_details/index.html.template"
      execute :sudo, "echo '<html><body><h1>Server error</h1></body></html>' | sudo tee #{file_path} > /dev/null"
    end
  end

  after :publishing, :modify_passenger_error_page
end
© www.soinside.com 2019 - 2024. All rights reserved.