ruby 扩展乘客:自定义内部乘客错误,同时仍然传递Rails错误

ej83mcc0  于 11个月前  发布在  Ruby
关注(0)|答案(2)|浏览(113)

我希望我的普通Rails错误页面被传递给用户代理。我当然可以使用普通Rails技术定制这些页面。
但如果有内部乘客错误(通常是乘客根本无法启动应用程序),我想自定义该页面。有什么方法可以做到这一点吗?
如果我(apache)将PassengerErrorView设置为on,那么我就可以在apache端配置内部乘客错误页面--但我想,我也会丢失所有定制的普通Rails错误页面。
有没有什么方法可以让我的自定义Rails错误页面保持正常运行,但仍然以某种方式自定义内部的Passenger致命错误屏幕?
谢谢你,谢谢

plicqrtu

plicqrtu1#

让我们看看我是否理解正确。如果用户收到HTTP 500错误页面,这可能来自三个不同的来源:
1.你的Rails应用程序(通常)
1.乘客(可能很少,例如产卵错误)

  1. Apache(覆盖1.和2.)
    而你想让用户得到的是:1. +(由你定制)2.
    覆盖2.的默认方法确实是使用选项3.,但这也会覆盖1.,这是您不希望看到的。
    我认为Passenger中目前没有其他选项可以覆盖2.,但你可以覆盖Passenger使用的模板。如果友好的错误页面设置为off,模板是:
`passenger-config about resourcesdir`/templates/undisclosed_error.html.template

字符串

au9on6nz

au9on6nz2#

我最终为此编写了一个自定义卡皮斯特拉诺任务。

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

字符串

相关问题