0

我在应用程序上遇到了一些奇怪的错误,所有这些错误都与随机爬虫请求不存在的 URL 和 Rails 无法识别有关。

即爬虫请求 [website]/local/favicon.ico 并且下面的代码无法识别它应该呈现 404,因为对象为 nil,导致应用程序在第一个方法调用时中断:

@local = Local.find_by_slug(params[:c])
render_404(RuntimeError.new(request.path)) and return unless @local

我知道我可以阻止爬虫 IP,但这看起来不是最好的解决方案。

有人对如何使用 Rails 解决这个问题有任何想法吗?

4

1 回答 1

0

观察在请求字符串中使用句点,然后在 params 哈希中查找它们。句点表示格式,因此您的示例中的 params[:c] 可能只是网站图标,而不是完整的路径名。

我建议在救援块中处理它,因为这种特殊方法看起来很脆弱。

尝试类似:

begin
  @local = Local.find_by_slug(params[:c])
rescue Exception => e
  # Choose to do something with e here (email admin etc.)
  render_404(RuntimeError.new(request.path)) and return
end
于 2013-10-19T02:20:36.983 回答