@aaltqna

Изменяется ли переменная из сonfig/initializers у всех пользователей, при ее изменении одним пользователем?

Допустим, я создаю файл api.rb в config/initializers, внутри что-то типа:
require 'api'

Api.setup do |config|
  config::Request.api_user_email ||= ENV['API_USER_EMAIL']
  config::Request.api_user_password ||= ENV['API_USER_PASSWORD']

  config::Request.api_user_id = nil
end


После будут производиться запросы к апи через Api::Request.retrieve( body: body ).

При этом каждый запрос будет требовать заполненный Api::Request.api_user_id. Поэтому я в application_controller делаю следующее:

before action :set_api_user_id

def set_api_user_id
  Api::Request.api_user_id = current_user.id
end


Либо я буду напрямую устанавливать в нужных местах этот Api::Request.api_user_id перед запросом.

Теперь вопрос: если это все происходит на сервере, где куча пользователей выполняют свои действия, то будет ли влиять изменение Api::Request.api_user_id одним пользователем на всех пользователей, либо же каждый пользователь имеет свой процесс и свой Api::Request.api_user_id? А если это происходит в джобе?
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
@aaltqna Автор вопроса
Да, изменение этой переменной одним пользователем повлечет ее изменение у всех пользователей.

before_action поможет сделать так, чтобы перед действиями пользователя был установлен именно его id, но 100% результата это не дает, потому что между началом и окончания действия другой пользователь может успеть изменить переменную.

Поэтому рекомендуется избегать изменения всего, что инициализировано в сonfig/initializers. Более того, если речь идет об обычных переменных, то переменные, имя которых начинается с маленькой буквы, будут локальными и к ним после доступ уже не получить. А имя которых с большой буквы - будут реальными константами, которые уже сама система не даст изменить. Однако с переменными класса таких ограничений нет, и чет об этом нигде не сказано.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы