У меня есть код в контроллере, который запускает поток, который периодически вызывает веб-сервис, пока не получит определенный ответ, не изменит некоторые переменные сеанса и не выйдет из потока. Переменные сеанса устанавливаются при первом входе пользователя в систему, и этот процесс обновляет их. Процесс выполняется правильно, но значения сеанса не изменяются при поступлении следующего запроса после завершения процесса. Вот упрощенный пример:
session[:test_var_a] = 'A'
session[:test_var_b] = 'B'
#start a job to reload the session data when the run finishes
Thread.new do
session[:test_var_b] = 'B2'
SESSION_MUTEX.synchronize do
sleep(4.seconds)
session[:test_var_c] = 'C2'
session
end
function_that_takes_some_time(run_id: id)
Thread.exit
end
Внутри потока сразу после вызова функции все переменные сеанса выглядят так, как я и ожидал (A, B2, C2). Но при следующем запросе, который заканчивается, он выглядит как A, B2, nil. У меня есть другие переменные, которые на самом деле установлены внутри функции, и все они тоже сбрасываются. Почему test_var_b сохраняет значение, установленное в потоке, а остальные - нет? Те, что установлены в функции, также не находятся внутри мьютекса. Связано ли это со временем, что запись в сеанс происходит только тогда, когда исходный запрос не вернулся? Я использую memcache для своего магазина сессий
Спасибо за помощь