我一直在尝试修复我正在开发的Rails应用程序中的错误,并且我一直收到一个没有错误的空白屏幕。我在development.log
中找不到任何有用的东西(虽然它确实显示正在运行的查询等)。
最后,我开始怀疑它是否以某种方式设置不再显示错误。我试着评论一条必要的路线,果然,我得到了一个空白页而不是我预期的错误和堆栈跟踪。
可能导致此问题的原因是什么?
(我想知道是否可能我不小心正在运行生产模式并且错误不应该显示,但development.log
正在追加,如果我打开script/console
并回显{{1}它说发展。)
答案 0 :(得分:3)
我今天早上躺在床上时发现了问题,归结为“我做了些蠢事”。 (它不总是吗?)
首先,聪明的部分:我跟着some neat advice about setting up access control and permissions。它为你提供了很好的语法,可以说出允许的内容,例如:
<%= link_to 'Delete', @photo, :confirm => "Really delete this photo?", :method => :delete if current_user.can_delete?(@photo)%>
(current_user
位来自Restful-authentication插件。)
作者还演示了如何处理用户尝试输入您尚未为其提供链接的URL的情况。它涉及设置一个特殊的异常类,它是StandardError
的子类,并使用类似401.html
的方式处理它 - 访问被拒绝。
我做的那些是愚蠢的我盲目跟随他的榜样。他表明了这一点:
def rescue_action(e)
case e
when SecurityTransgression
head :forbidden
end
end
...处理SecurityTransgression
罚款,但打破了Rails中的默认错误处理。 (我确信作者知道并处理了它,但他没有讨论它。)
解决方案是添加两行:
def rescue_action(e)
case e
when SecurityTransgression
head :forbidden
else
super
end
end
“else super”部分说“如果我在这里没有指定任何内容,请让继承的rescue_action
方法处理它。”
现在我正在为原始问题获取正确的堆栈跟踪,并将继续对其进行故障排除。
教训:当你搞乱异常处理时要小心,并确保默认情况仍然有效!
答案 1 :(得分:1)
检查您的默认路线并确保视图不仅为空。