如何找出我的 Rails 控制器返回 500 错误代码的原因?
How can I find out why my Rails controller is returning a 500 error code?
在测试中,对 session.get root_path
的调用返回 500 错误代码,即 assert session.response.success?
失败。
这曾经很好,很明显我已经坏了一些东西,但由于以下原因我无法缩小原因:
- 没有抛出异常。
session.response.body
的值是正确的(即它包含正确呈现的 HTML 我期望控制器中的 render template: ...
调用。
换句话说,实际上似乎没有任何问题,但仍然有 500 HTTP 响应。
注意:我在控制器操作的前面设置了 status = :success
(或其他一些值),然后将其作为 status: status
传递给渲染。这是因为我正在根据会话中的某些内容检测到可能的未授权访问。
好吧,我不注意了。测试的方法叫#success?
,但响应代码符号叫:ok
.
公平地说,其他 Rails 测试方法/响应代码符号倾向于直接映射。
澄清:
所以根据 Max 的评论,这里的要点是 #success?
returns 对于任何 200 系列“快乐”HTTP 代码都是正确的。不过,它是一个总称,因此不能传递给 render
。
我已将相关代码更新为更像:
status = :ok # This was :success
if redirecting_from_access_denied?
status = :unauthorized
end
在测试中,对 session.get root_path
的调用返回 500 错误代码,即 assert session.response.success?
失败。
这曾经很好,很明显我已经坏了一些东西,但由于以下原因我无法缩小原因:
- 没有抛出异常。
session.response.body
的值是正确的(即它包含正确呈现的 HTML 我期望控制器中的render template: ...
调用。
换句话说,实际上似乎没有任何问题,但仍然有 500 HTTP 响应。
注意:我在控制器操作的前面设置了 status = :success
(或其他一些值),然后将其作为 status: status
传递给渲染。这是因为我正在根据会话中的某些内容检测到可能的未授权访问。
好吧,我不注意了。测试的方法叫#success?
,但响应代码符号叫:ok
.
公平地说,其他 Rails 测试方法/响应代码符号倾向于直接映射。
澄清:
所以根据 Max 的评论,这里的要点是 #success?
returns 对于任何 200 系列“快乐”HTTP 代码都是正确的。不过,它是一个总称,因此不能传递给 render
。
我已将相关代码更新为更像:
status = :ok # This was :success
if redirecting_from_access_denied?
status = :unauthorized
end