модуль ActiveSupport::PerThreadRegistry
ПРИМЕЧАНИЕ: Этот подход устарел для кода конечного пользователя в пользу thread_mattr_accessor и аналогичных. Пожалуйста, используйте этот подход вместо него.
Этот модуль используется для инкапсуляции доступа к переменным потоков.
Вместо того, чтобы загрязнять пространство имён потоковых локальных переменных:
Thread.current[:connection_handler]
вы определяете класс, который расширяет этот модуль:
module ActiveRecord
class RuntimeRegistry
extend ActiveSupport::PerThreadRegistry
attr_accessor :connection_handler
end
end
и вызываете объявленные методы доступа к экземплярам как методы класса. Таким образом
ActiveRecord::RuntimeRegistry.connection_handler = connection_handler
устанавливает обработчик подключения, локальный для текущего потока, и
ActiveRecord::RuntimeRegistry.connection_handler
возвращает обработчик подключения, локальный для текущего потока.
Эта функция достигается путём создания экземпляра класса и хранения экземпляра как потоковой локальной переменной с ключом, соответствующим имени класса. В примере выше ключ “ActiveRecord::RuntimeRegistry” хранится в Thread.current. Методы класса проксируют к указанному экземпляру потоковой локальной переменной.
Если класс имеет инициализатор, он должен принимать ноль аргументов.
Публичные методы класса
# File activesupport/lib/active_support/per_thread_registry.rb, line 42
def self.extended(object)
ActiveSupport::Deprecation.warn(<<~MSG)
ActiveSupport::PerThreadRegistry is deprecated and will be removed in Rails 7.1.
Use `Module#thread_mattr_accessor` instead.
MSG
object.instance_variable_set :@per_thread_registry_key, object.name.freeze
end Публичные методы экземпляра
# File activesupport/lib/active_support/per_thread_registry.rb, line 50 def instance Thread.current[@per_thread_registry_key] ||= new end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.