我正在为我的会话使用activerecord-session_store 0.1.0 gem。
开发工作正常(在nitrous.io上)。
生产失败(在shellycloud上),但出现错误:
Invalid option key: session_store=
整个错误日志+一些包信息在这里http://pastebin.com/P4P1btcS
现在,我对如何调试这个东西没有任何想法。 Bundle在安装会话商店gem时没有说什么。
我该如何处理?
答案 0 :(得分:0)
由Active Record类支持的会话存储。默认类是
提供,但任何对象鸭子键入Active Record Session类
使用文本session_id
和data
属性就足够了。
将此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_at
和updated_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会话存储。你可以 使用它作为高性能数据库特定商店的基础。