多机部署rails下的session处理实践

    技术2022-05-11  71

    背景:rails部署在多个机器上,如何处理session? 如果单机部署那么不用理会这个问题,使用系统默认的session机制既可,如果多机情况下就不一样,处理不当很有可能出现, 用户在一台机器已经登陆,结果下次访问另一台机器,可能就会被迫再次登陆(因为这台机器并没有session数据)。用户只管使用,并不关心你的应用如何部署,所以出现这种情况会让用户很困惑,甚至会造成比较严重的后果。 我尝试采用了数据库存储session的方案。即多个rails共享一个数据库中的session表中的纪录。 无论用户访问哪台rails机器,rails都会取出同一行session数据 具体步骤如下: step 1)修改 environment.rb 加上如下一行代码: ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS[:database_manager]=CGI::Session::ActiveRecordStore step 2)在数据库加上如下一张表 CREATE TABLE `sessions` (   `id` int(11) NOT NULL auto_increment,   `sessid` varchar(255) default NULL,   `data` text,   `updated_at` datetime default NULL,   PRIMARY KEY  (`id`),   KEY `session_index` (`sessid`) ) ; 关于session的过期清除 写一个脚本定时删除过期的session纪录, sql语句如下: delete from sessions where now()-update_at>3600

    最新回复(0)