activerecord-session_store加载在生产时失败

时间:2014-08-14 11:23:55

标签: ruby-on-rails ruby

我正在为我的会话使用activerecord-session_store 0.1.0 gem。

开发工作正常(在nitrous.io上)。

生产失败(在shellycloud上),但出现错误:

Invalid option key: session_store=

整个错误日志+一些包信息在这里http://pastebin.com/P4P1btcS

现在,我对如何调试这个东西没有任何想法。 Bundle在安装会话商店gem时没有说什么。

我该如何处理?

1 个答案:

答案 0 :(得分:0)

Active Record Session Store

由Active Record类支持的会话存储。默认类是 提供,但任何对象鸭子键入Active Record Session类 使用文本session_iddata属性就足够了。

安装

将此gem包含在您的Gemfile中:

ruby gem 'activerecord-session_store'

运行迁移生成器:

rails generate active_record:session_migration

然后,将会话商店设置为config/initializers/session_store.rb

ruby Foo::Application.config.session_store :active_record_store

配置

默认值假设sessions表包含列:

  • id(数字主键),
  • session_id(字符串,通常为varchar;最大长度为255)和
  • data(文字或长篇文字;如果您的会话数据超过65KB,请小心)。

应始终为session_id列编制索引,以便快速查找。 会话数据以Base64格式封送到data列。 如果您编写的数据大于列的大小限制, 将引发ActionController :: SessionOverflowError。

您可以配置表名,主键和数据列。 例如,在config/application.rb

的末尾

ruby ActiveRecord::SessionStore::Session.table_name = 'legacy_session_table' ActiveRecord::SessionStore::Session.primary_key = 'session_id' ActiveRecord::SessionStore::Session.data_column_name = 'legacy_session_data'

请注意,将主键设置为session_id会将您从中释放出来 如果您不想要它,请单独添加id列。但是,你必须 手动设置session.model.id = session.session_id! A过滤器之前 在ApplicationController上是个好地方。

由于默认类是一个简单的Active Record,因此您可以获得时间戳 如果您添加created_atupdated_at日期时间列,则免费提供 sessions表,使定期会话过期成为现实。

您可以提供自己的会话类实现,无论是否 功能丰富的Active Record或裸机高性能SQL 存储,通过设置

ruby ActionDispatch::Session::ActiveRecordStore.session_class = MySessionClass

您必须实施以下方法:

  • self.find_by_session_id(session_id)
  • initialize(hash_of_session_id_and_data, options_hash = {})
  • attr_reader :session_id
  • attr_accessor :data
  • save
  • destroy

示例SqlBypass类是一个通用的SQL会话存储。你可以 使用它作为高性能数据库特定商店的基础。