0

我正在从 JRuby 1.5 升级到 JRuby 1.6.3,从 Rails 2.3.5 升级到 Rails 3.0。

早些时候,我曾经使用过:

ActionController::Base.session_store = :java_servlet_store if defined?($servlet_context)

在 config/initializers/session_store.rb

现在在同一个文件中:

Mb30::Application.config.session_store = :java_servlet_store if defined?($servlet_context)

生产环境中的早期版本用于产生jsessionid并与会话很好地配合使用。由于我在 Tomcat 中使用了 Java servlet 存储,因此我使用了 Tomcat 中的默认会话超时功能web.xml,并且效果非常好。

但是,升级后我在 Firebug 中看到jsession创建了一个 id。但同时_session_id还创建了一个 Rails 并杀死jsessionid不会杀死 Rails 会话 id 。此外,我的应用程序上有一个 HTTP 包装器 API,它获取响应并将其作为 xml 发送。在这里,我认为jsessionid与 Rails 会话不匹配,因为在 API 中我无法获取会话对象,因为它们是在 Rails 会话中设置的。

这是我的宝石:

*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.0)
actionpack (3.0.0)
activemodel (3.0.0)
activerecord (3.0.0)
activerecord-jdbc-adapter (0.9.7 java)
activerecord-jdbcpostgresql-adapter (0.9.7 java)
activeresource (3.0.0)
activesupport (3.0.0)
arel (1.0.0)
bouncy-castle-java (1.5.0146.1)
builder (2.1.2)
bundler (1.0.18)
erubis (2.6.6)
i18n (0.4.1)
jdbc-postgres (8.4.701 java)
jrails (0.6.0)
jruby-jars (1.6.3)
jruby-openssl (0.7.2, 0.7)
jruby-rack (1.1.1, 1.0.10)
mail (2.2.5)
mime-types (1.16)
polyglot (0.3.2)
rack (1.2.1)
rack-mount (0.6.12)
rack-test (0.5.4)
rails (3.0.0)
railties (3.0.0)
rake (0.9.2, 0.8.7)
rubyzip (0.9.4)
sources (0.0.1)
thor (0.14.0)
treetop (1.4.10)
tzinfo (0.3.29, 0.3.23)
warbler (1.2.0)

谁能告诉我这里的问题可能是什么?

4

1 回答 1

0

我假设那Mb30::Application是您的 Rails 应用程序,它本身Rails::ApplicationActionController::Base.

尝试将此添加到config/application.rb

config.action_dispatch.session_store = :java_servlet_store

以及为会话存储设置初始化程序config/initializers/session_store.rb

Mb30::Application.config.session_store :java_servlet_store

初始化器可能不是必需的;我在设置自定义数据库会话存储时使用了它,因为我遇到了类似的问题。

于 2011-12-29T14:32:47.430 回答