Безопасны ли значения Thread.current [] и атрибуты уровня класса в рельсах? - PullRequest
3 голосов
/ 12 июля 2011

У меня есть конкретная проблема, которую я пытаюсь решить в приложении rails 3, и я вижу два наиболее распространенных решения:

Thread.current[:something] = value

и

class Foo
  cattr_accessor :bar
end

Foo.bar = value

Безопасны ли эти методы хранения данных (и соответствующего поиска) для нескольких пользователей, одновременно запрашивающих мое приложение rails?

Я обеспокоен потоком Thread.current, поскольку веб-сервер может использовать один поток для обслуживания нескольких запросов, верно? Или есть что-то в том, как rails обрабатывает потоки, чтобы предотвратить проблемы при использовании Thread.current? Я вижу Действует как текущий использует Thread.current для хранения текущего пользователя, так что это дает мне надежду ... но я хочу авторитетное подтверждение.

Меня также беспокоят атрибуты уровня класса в производственной среде, поскольку я ожидаю, что рельсы будут кэшировать объекты класса в памяти по соображениям производительности. Атрибут уровня класса повторно используется в запросах? или это безопасно из-за того, что rails делает для обработки атрибутов класса между запросами? Опять же, я хотел бы получить достоверное подтверждение этого.

... это приложение использует Ruby 1.9.2@p180, с Rails 3.0.9

1 Ответ

1 голос
/ 12 июля 2011

Достаточно безопасно для хранения часового пояса текущего запроса:

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/time/zones.rb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...