ear*_*old 3 session ruby-on-rails redis
我有一个很大的应用程序,有多少千个活动会话.我想迁移到使用Redis的会话存储此.理想情况下,我希望我当前的会议保持活跃.
有没有人有迁移活动会话的经验.我假设我写了一个迁移或rake任务(我认为迁移,所以我可以删除旧表作为其中的一部分),我想写入redis所有当前的细节.
old_sessions = ActiveRecord::Base.connection.select_all("select * from sessions")
old_sessions.each { |session| $redis.set(????? ????) }
Run Code Online (Sandbox Code Playgroud)
但我担心数据完整性.
ear*_*old 13
好吧,经过一天的黑客攻击,这就是我想出的:
class MoveActiveRecordSesionsIntoRedis < ActiveRecord::Migration
def up
#get all the sessions from the last month
old_sessions = ActiveRecord::Base.connection.select_all("select * from sessions where updated_at > '#{Time.now - 1.month}'")
old_sessions.each do |session|
#convert the base64 data back into the object
data = ActiveRecord::SessionStore::Session.unmarshal(session["data"])
#load each session into Redis, dumping the object appropriately
$redis.setex session["session_id"],
1.month.to_i,
Marshal.dump(data).to_s.force_encoding(Encoding::BINARY)
end
#drop the old session table (So long unecessary 3Gigs!)
drop_table :sessions
end
def down
raise ActiveRecord::IrreversibleMigration, "Session face-plant!"
end
end
Run Code Online (Sandbox Code Playgroud)
我把它作为参考.或者,如果你看到它有问题,我会全力以赴.
归档时间: |
|
查看次数: |
2263 次 |
最近记录: |