生产中的rails 3 app会在找不到记录时引发500错误?

时间:2011-09-02 06:44:57

标签: ruby-on-rails ruby-on-rails-3

当我找到一个虚假的网址时:

/帖/ 99999999

在我的本地机器上,我看到了:

ActiveRecord::RecordNotFound in Posts#show

Showing /Users/patrick/rails/my_app/app/views/posts/show.html.haml where line #1 raised:

无法找到ID = 99999的帖子

...日志显示:

Rendered posts/show.html.haml within layouts/application (29.6ms)
Completed   in 423ms

ActionView::Template::Error (Couldn't find Post with ID=99999)

---但是,当我在制作中这样做时,我得到了public / 500.html错误页面,而不是404 ...我有点困惑,因为在开发模式下,浏览器显示ActiveRecord :: RecordNotFound(这应该是404,是吗?)但是日志显示了ActionView :: Template :: Error--没有提到ActiveRecord :: RecordNotFound。

所以,最终,我的问题是,我怎样才能把它变成404而不是500呢?而且 - 为什么它是500?

2 个答案:

答案 0 :(得分:3)

从我所看到的,Rails应该自动创建一个ActiveRecord :: RecordNotFound呈现404.html页面...我发现的问题是我使用gem decent_exposure,并且由于它的延迟加载性质,它会导致在视图而不是控制器中发生错误,因此Rails不知道渲染404页面,因为它显示为实际的ActionView :: Template :: Error ...

答案 1 :(得分:3)

只需向!方法添加find_by_column

示例:

@post = Post.find_by_id!(params[:id])

然后,抛出RecordNotFound异常。