跳到內容 跳到搜尋

Action Dispatch DebugLocks

此中間件可用於診斷自動載入互鎖中的死結。

要使用它,請將其插入中間件堆疊的頂端,使用 config/application.rb

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

在重新啟動應用程式並重新觸發死結狀態後,路由 /rails/locks 會顯示 interlock 目前已知的所有執行緒摘要,它們持有的或正在等待的鎖定層級,以及它們目前的回溯。

通常死結將由 interlock 衝突與某個其他外部鎖定或封鎖 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