Безопасно ли использовать Thread.current с Unicorn в Rails? - PullRequest
0 голосов
/ 09 октября 2018

Мне нужно получить текущее имя пользователя для входа в код модели, но я не хочу добавлять новый дополнительный параметр, который потребует многих изменений.Поэтому я думаю, работает ли оно, чтобы поместить имя пользователя для входа в Thread.current, а затем получить к нему доступ в коде модели.Это работает с простой попытки, но у меня есть вопрос, может ли он работать должным образом с несколькими рабочими Unicorn, например: запрос на вход в систему обрабатывается работником 1, а второй запрос обрабатывается работником 2. Я понимаю, что этодолжно быть в порядке, потому что я установил его из сеанса в Thread.current в ApplicationController перед фильтром, который должен выполняться в начале каждого запроса.- если работника-единорога убивают и перезапускают по какой-либо причине, будет ли запрос повторно инициирован и сохранятся ли данные сеанса?У меня недостаточно знаний о единороге ... так что, вероятно, это наивный вопрос ...

И еще какие-нибудь возможные проблемы с использованием Thread.current?

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 09 октября 2018

Вам не нужно использовать потоки напрямую, вы можете использовать этот гем https://github.com/steveklabnik/request_store

Код вашей модели пользователя может выглядеть примерно так:

def self.current_user
  RequestStore.store[:current_user]
end

def self.current_user=(logged_in_user)
  RequestStore.store[:current_user] = logged_in_user
end

И в вашем контроллере, после входа в систему вы можете установить User.current_user = current_user

...