Rails:空白页 - 没有错误或堆栈跟踪

时间:2010-03-26 00:48:35

标签: ruby-on-rails

我一直在尝试修复我正在开发的Rails应用程序中的错误,并且我一直收到一个没有错误的空白屏幕。我在development.log中找不到任何有用的东西(虽然它确实显示正在运行的查询等)。

最后,我开始怀疑它是否以某种方式设置不再显示错误。我试着评论一条必要的路线,果然,我得到了一个空白页而不是我预期的错误和堆栈跟踪。

可能导致此问题的原因是什么?

(我想知道是否可能我不小心正在运行生产模式并且错误不应该显示,但development.log正在追加,如果我打开script/console并回显{{1}它说发展。)

2 个答案:

答案 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)

检查您的默认路线并确保视图不仅为空。