簡體   English   中英

如何從Puma獲取隔離的線程信息

[英]How to get isolated thread information from Puma

我有一個使用Puma的Rails應用程序。

Puma配置為:

workers 2
threads 1, 16
app_dir = File.expand_path("../..", __FILE__)
tmp_dir = "#{app_dir}/tmp"
rails_env = ENV['RAILS_ENV'] || "development"
environment rails_env
daemonize
bind "unix://#{tmp_dir}/sockets/puma.sock"
stdout_redirect "log/puma.stdout.log", "log/puma.stderr.log", true
pidfile "#{tmp_dir}/pids/puma.pid"
state_path "#{tmp_dir}/pids/puma.state"

當兩個請求具有一個pid時,它們將具有一個公共狀態。

例如,我們有一個簡單的單例:

class Test
  include Singleton
  attr_accessor :field
end

第一個請求集:

Test.instance.field = 'from_first_request'

在第二個請求中,我們看到:

puts(Test.instance.field) # => 'from_first_request'

這是正確的行為嗎? 我們可以在一個pid上獲取任何請求的隔離狀態嗎?

如果使用Rails 5.0,則還可以使用新的線程特定變量,如下所示:

class SomeSingleton
  thread_mattr_accessor :field
end

如果您的Rails版本<5.0,您仍然可以在Thread.current中存儲字段,如下所示:

class SomeSingleton
  def self.field=(field)
    Thread.current[:field] = field
  end

  def self.field
    Thread.current[:field]
  end
end

讓我知道是否有幫助。

您也可以使用request_store gem。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM