Доступ к `session` в потоке контроллера rails - PullRequest
0 голосов
/ 26 января 2010

Как посмотреть / изменить данные сеанса из потока внутри рельсов? Посмотрите этот фрагмент кода внутри моего контроллера:

def controller_action
  session[:something] = 'before'   # works properly
  Thread.new do
    session[:something] = 'after'  # out of scope.  <--- how do I fix this?
  end
end

(относится к этому вопросу , но гораздо более конкретно. Я ожидаю совсем других ответов.)

Ответы [ 2 ]

1 голос
/ 26 января 2010

Зачем вам нужно изменять данные сеанса в фоновом потоке?

Используете ли вы хранилище файлов cookie по умолчанию, потому что если вы не уверены, как это будет работать. Если вы переключитесь на хранилище сессий memcached / database, вам может повезти больше, поскольку вы сможете получить доступ к сеансу после завершения запроса.

0 голосов
/ 26 января 2010

Я до сих пор не уверен, почему сессия не будет находиться в области действия по ссылке внутри потока, но если это так, вы можете попробовать передать текущую привязку к потоку в качестве аргумента:

Thread.new(binding) do 
    thread_session = eval("session", binding)
end

Или что-то в этом роде. Я до сих пор не убежден, что сеанс по значению, а не по ссылке в теме. Чтобы проверить это, я просто передал некоторые хэши в новые потоки на консоли, и изменения, внесенные в хэш внутри потока, видны снаружи этого потока. Есть ли какая-то магия, которая заставляет сессию вести себя по-другому?

РЕДАКТИРОВАТЬ: Не будет ли DelayedJob лучшим способом для обработки длительного процесса, выделенного из запроса пользователя?

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