Я до сих пор не уверен, почему сессия не будет находиться в области действия по ссылке внутри потока, но если это так, вы можете попробовать передать текущую привязку к потоку в качестве аргумента:
Thread.new(binding) do
thread_session = eval("session", binding)
end
Или что-то в этом роде. Я до сих пор не убежден, что сеанс по значению, а не по ссылке в теме. Чтобы проверить это, я просто передал некоторые хэши в новые потоки на консоли, и изменения, внесенные в хэш внутри потока, видны снаружи этого потока. Есть ли какая-то магия, которая заставляет сессию вести себя по-другому?
РЕДАКТИРОВАТЬ: Не будет ли DelayedJob лучшим способом для обработки длительного процесса, выделенного из запроса пользователя?