首页 > 解决方案 > 在 Rails 中,如何响应无关的非 http 请求?

问题描述

我有一个相对较大的网站,每天都会收到与各种 IP 地址无关的请求。一个常见的是example.com/home.zip.

这击中了我的 Home 控制器 index action {"controller"=>"home", "action"=>"index", "format"=>"zip"}。目前,它会导致 500 错误:

Missing template home/index, application/index with {:locale=>[:en], :formats=>[:zip], :handlers=>[:erb, :builder, :arb]}

我想处理它的优雅方式是 404。我最接近的解决方案是:

respond_to do |format|
  format.html
  format.any { redirect_to :foo }
end

除了redirect_to :foo我会做的render file: "#{Rails.root}/public/404.html", status: 404。我在正确的轨道上吗?

标签: ruby-on-railsruby-on-rails-3error-handlingrequestresponse

解决方案


没有理由自己渲染404,你可以

 raise ActionController::RoutingError.new('Not Found')

对于这种情况,您也可以使路由约束更加困难,这样此类请求就不会命中控制器。


推荐阅读