跳至内容 跳至搜索

Action Dispatch DebugLocks

此中间件可用于诊断自动加载锁中的死锁。

要使用它,请将其插入中间件堆栈的顶部附近,使用 config/application.rb

config.middleware.insert_before Rack::Sendfile, ActionDispatch::DebugLocks

在重新启动应用程序并重新触发死锁条件后,路由 /rails/locks 将显示当前已知于锁的所有线程的摘要,它们持有的或正在等待的锁级别,以及它们的当前回溯。

通常,死锁会由锁与某些其他外部锁或阻塞 I/O 调用发生冲突引起。这些无法自动识别,但应该在显示的回溯中可见。

注意:此中间件输出的格式和内容是为人设计的,并可能在不同版本之间发生变化。

此中间件暴露服务器的操作细节,没有访问控制。它应该只在需要时启用,并在之后移除。

方法
C
N

类公共方法

new(app, path = "/rails/locks")

# File actionpack/lib/action_dispatch/middleware/debug_locks.rb, line 30
def initialize(app, path = "/rails/locks")
  @app = app
  @path = path
end

实例公共方法

call(env)

# File actionpack/lib/action_dispatch/middleware/debug_locks.rb, line 35
def call(env)
  req = ActionDispatch::Request.new env

  if req.get?
    path = req.path_info.chomp("/")
    if path == @path
      return render_details(req)
    end
  end

  @app.call(env)
end