Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 两次解救被处决的人_Ruby On Rails_Ruby_Google Chrome_Exception Handling - Fatal编程技术网

Ruby on rails 两次解救被处决的人

Ruby on rails 两次解救被处决的人,ruby-on-rails,ruby,google-chrome,exception-handling,Ruby On Rails,Ruby,Google Chrome,Exception Handling,我试图使用rescue_from从我的控制器中解救运行时错误,将其记录为HealthNotification,然后使用flash消息重定向用户,但我发现在某些情况下,rescue_from方法运行了两次(我最终得到了两个重复的HealthNotices)。如果从方法中调用的函数(如下面的测试方法)引发异常,它只会创建一个异常,但是如果我直接在方法中引发异常(如test2),则rescue函数会运行两次(尽管奇怪的是,我没有得到双渲染错误--) 类门户::BluerimController:索引并

我试图使用rescue_from从我的控制器中解救运行时错误,将其记录为HealthNotification,然后使用flash消息重定向用户,但我发现在某些情况下,rescue_from方法运行了两次(我最终得到了两个重复的HealthNotices)。如果从方法中调用的函数(如下面的测试方法)引发异常,它只会创建一个异常,但是如果我直接在方法中引发异常(如test2),则rescue函数会运行两次(尽管奇怪的是,我没有得到双渲染错误--)

类门户::BluerimController:索引并返回
结束
def测试
Sotal.new.test#一种引发运行时错误的方法——只有1个HealthNotice
结束
def测试2
提出“错误”#导致重复健康通知
结束
结束

对我做错了什么有什么建议吗?谢谢

没有意义,您可以添加请求中显示的日志以进行
test2
,也可以添加
config/routes.rb
PortalController
ApplicationController
这两个选项,但这并不容易——PortalController大约有3500行长。你能告诉我应该在那里找什么样的东西吗?当我观看日志时,我基本上看到两个GET请求背对背地执行相同的操作(以及随后的HealthNotice创建和重定向),那么让我们从日志和路由开始吧。无论出于何种原因,这只有在我使用chrome时才会发生。如果我用IE点击测试动作,它会重定向OK并只创建1个HealthNotice。而且,在某些时候,chrome也能像预期的那样工作。这显然是多个请求按顺序命中测试操作的问题。我想我遇到了这里提到的问题:如果我关掉了,我可以确认“预取资源以更快地加载页面。”在chrome设置->高级->隐私下,问题消失了。我有点惊讶我以前从未遇到过这个问题,但我也不知道在我的场景中处理它的好方法..没有意义,你能添加
test2
请求中显示的日志吗,还可以添加您的
config/routes.rb
PortalController
ApplicationController
这两个选项,这并不容易——PortalController大约有3500行长。你能告诉我应该在那里找什么样的东西吗?当我观看日志时,我基本上看到两个GET请求背对背地执行相同的操作(以及随后的HealthNotice创建和重定向),那么让我们从日志和路由开始吧。无论出于何种原因,这只有在我使用chrome时才会发生。如果我用IE点击测试动作,它会重定向OK并只创建1个HealthNotice。而且,在某些时候,chrome也能像预期的那样工作。这显然是多个请求按顺序命中测试操作的问题。我想我遇到了这里提到的问题:我可以确认,如果我关闭“预回迁资源以更快地加载页面”。在chrome设置->高级->隐私下,这个问题就会消失。我有点惊讶我以前从未遇到过这个问题,但我也不知道在我的场景中有什么好的方法来处理它。。
class Portal::BluerimController < PortalController
    rescue_from RuntimeError, with: :error_handler
    def error_handler(e)
      hn_long_message = "#{e.class}: #{e.message}\n#{e.backtrace.join("\n")}\n\nPARAMS:\n#{params}"
      HealthNotice.create(name: "API Exception Handled", severity: "WARNING", short_message: e.message, long_message: hn_long_message)
      flash[:notice] = e.message
      redirect_to :action => :index and return
    end

    def test
      Sotal.new.test  # a method that raises a RuntimeError -- only 1 HealthNotice
    end

    def test2
      raise "an error"  # results in duplicate HealthNotice
    end
end