My problem is that we're receiving mysterious 504 errors in SolanoCI, and I'm trying to find a clean way to handle them only in the test environment without adding test-specific code to our ApplicationController.
I've tried stubbing a default handler via the test setup like so:
allow(ApplicationController).to receive(:timeout).and_return {
#do a bunch of stuff to try to pull out request information
}
but I'm finding that it's lacking some important information that's accessible, like the original request url and any stacktrace information.
Any suggestions are welcome.
答案 0 :(得分:0)
我认为在这种情况下,最简单的方法是让Solano为你在他们的盒子上运行debugging session(他们给你ssh访问他们的服务器,所以你可以自己运行测试)。
在这样的黑匣子情况下,这是一个实时的节省时间。您可以多次运行测试并在那里使用各种调试工具。您可能必须先安装它们,因为Solano尝试不从您的Gemfile中安装额外的工具(例如pry)以最大限度地缩短测试的运行时间。
只需通过联系表单填写,他们就会为您提供访问权限。在你完成它之后不要忘记停止该会话,因为它的运行时间是从你计划中的工作时间中扣除的。
希望它有所帮助。
编辑:似乎Anonymous controller功能非常适合您的情况:
使用
controller
方法定义一个匿名控制器 继承自描述的类。这对于指定很有用 全局错误处理等行为。
所以,你可以这样做:
RSpec.describe ApplicationController, :type => :controller do
controller(ApplicationController) do
rescue_from Timeout::Error, :with => :log_timeout
def log_timeout(error)
# log error as you wish
end
end
describe "handling timeout exceptions" do
it "writes some logs" do
get :index
expect(response).to have_https_status(504)
end
end
end