Ruby on rails Rails无法识别零对象

Ruby on rails Rails无法识别零对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在一个应用程序中遇到了一些奇怪的错误,这些错误都与随机爬虫请求不存在的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

我在一个应用程序中遇到了一些奇怪的错误,这些错误都与随机爬虫请求不存在的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解决这个问题吗?

在请求字符串中使用句点,然后在参数散列中查找句点。句点表示格式,因此在您的示例中,params[:c]可能只是favicon,而不是完整的路径名

我建议在救援区处理这个问题,因为这个特殊的方法看起来很脆弱

尝试以下方法:

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

作业不是最后一次吗?@DaveNewton对不起,我没听懂。你能展开吗?在你编辑它之前,对
@local
的赋值是在
除非
调用之后发生的。这不起作用,因为第一行从不中断-它找不到任何东西,并创建了一个nil对象,该对象以某种方式传递了“除非@local”子句,继续在调用它的第一个方法中中断。