Я не совсем уверен, как работает scoped_session, за исключением того, что он выглядит как обертка, которая скрывает несколько реальных сессий, сохраняя их раздельными для разных запросов. Это делает это с локальными потоками?
В любом случае проблема заключается в следующем:
S = elixir.session # = scoped_session(...)
f = Foo(bar=1)
S.add(f) # ERROR, f is already attached to session (different session)
Не уверен, как f оказался в другом сеансе, у меня не было проблем с этим раньше. В другом месте у меня есть код, который выглядит так же, но на самом деле работает. Как вы можете себе представить, я нахожу это очень запутанным.
Я просто ничего не знаю здесь, f, кажется, волшебным образом добавлен к сеансу в конструкторе, но у меня нет ссылок на сеанс, который он использует. Почему это закончится в другой сессии? Как я могу заставить это закончить в правильной сессии? Как все-таки работает эта функция scoped_session? Иногда кажется, что это работает, а иногда - нет.
Я определенно очень смущен.