Rails:method_missing导致StackOverflowError

时间:2016-12-28 13:59:55

标签: ruby stack-overflow ruby-on-rails-5 method-missing

当在开发模式下运行的Rails服务器上触发对method_missing的调用时,它会以StackOverflowError消亡。这是JRuby环境中的Rails5。我们这里没有使用多线程。

行为可归纳如下:

  1. 发生StackOverflow的类是我们自己编写的。实施def method_missing并从那里开始产生正确的行为(例如fail 'oh noes.'将打印预期的错误。)
  2. 在已实施的method_missing中调用super(* args)将再次产生StackOverflowError
  3. debugger正上方拨打super,点击next即可显示以下呼叫:
    • gems/actionpack-5.0.1.rc2/lib/action_controller/metal/rescue.rb:22
      • request.env['action_dispatch.show_detailed_exceptions'] ||= show_detailed_exceptions?
    • gems/actionpack-5.0.1.rc2/lib/action_controller/metal/rescue.rb:23
      • rescue_with_handler(exception) || raise
    • [StackOverflow的]
  4. 在调试shell中(如第3点所述),任何通过backtraceinfo stack获取跟踪的尝试都将导致StackOverflow。
  5. 在测试或生产环境中启动服务器时,不会发生这种情况。
  6. 我们看到this commit中的Rails中删除了一些代码。实际上,将删除的代码放回(仅用于测试目的)可以解决问题。

    你认为这是一个铁轨错误吗?

1 个答案:

答案 0 :(得分:0)

可能在Error I'm Getting on Postman中解决了。 看起来像一个犹豫不决的小虫。