[英]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.