Я использую сеанс Rails для хранения cookie_jar, полученного из Mechanize. Это позволяет мне вызывать веб-сервис и поддерживать файлы cookie, которые он отправляет обратно.
Класс занимает сеанс в своем конструкторе, поэтому я передаю сеанс Rails. Затем, когда я вызываю сервис, я загружаю cookie_jar (если он у меня есть), например:
agent = WWW::Mechanize.new
agent.cookie_jar = YAML.load(@session[COOKIE_JAR]) if @session.has_key? COOKIE_JAR
Как только я закончу звонить, я снова сохраню cookie_jar как:
@session[COOKIE_JAR] = agent.cookie_jar.to_yaml
Хотя я хотел бы просто сохранить «агент», его нельзя сериализовать (и, следовательно, нельзя включить в сеанс). Вот интересная часть:
если я вызываю "session.inspect" в конструкторе классов (или в любое время, прежде чем проверять, есть ли у сеанса ключ, который я ищу), все работает нормально. Удалите вызов "session.inspect", и он больше не работает.
Кто-нибудь знает, почему сеанс Rails ведет себя таким образом?