我希望将普通的 Rails 错误页面传递给用户代理。我当然可以使用普通的 Rails 技术自定义这些页面。
但是如果存在内部乘客错误(通常是乘客根本无法启动应用程序),我想自定义该页面。有什么办法可以做到吗?
如果我(apache)将 PassengerErrorOverride 设置为打开,那么我可以在 apache 端配置内部乘客错误页面 - 但我认为我也会丢失所有自定义的普通 Rails 错误页面。
有什么方法可以让我的自定义 Rails 错误页面主体保持正常运行,但仍以某种方式自定义内部 Passenger 致命错误屏幕?
谢谢!
让我们看看我的理解是否正确。例如,如果向用户提供 HTTP 500 错误页面,则该页面可能来自三个不同的来源:
您希望用户获得:1.+(由您定制)2.
覆盖 2. 的默认方法确实是使用选项 3.,但这也会覆盖 1.,这是您不想要的。
我认为 Passenger 中目前没有另一个选项可以覆盖 2.,但您可以覆盖 Passenger 使用的模板。如果友好错误页面设置为关闭,模板为:
`passenger-config about resourcesdir`/templates/undisclosed_error.html.template
我最终为此编写了一个自定义 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