跳到内容 跳到搜索

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