Ruby on rails 3 AuthLogic似乎为一个请求多次更新用户记录
对于一个操作请求,我看到大约6次用户模型的AuthLogic相关记录更新。我想知道这是否正常,或者其他人是否遇到过这种情况,我能做些什么。我仍在努力寻找原因,但我高度怀疑这与AuthLogic有关 正如您所看到的,记录的更新非常缓慢,在一个请求中发生所有这些情况令人担忧Ruby on rails 3 AuthLogic似乎为一个请求多次更新用户记录,ruby-on-rails-3,session,authlogic,Ruby On Rails 3,Session,Authlogic,对于一个操作请求,我看到大约6次用户模型的AuthLogic相关记录更新。我想知道这是否正常,或者其他人是否遇到过这种情况,我能做些什么。我仍在努力寻找原因,但我高度怀疑这与AuthLogic有关 正如您所看到的,记录的更新非常缓慢,在一个请求中发生所有这些情况令人担忧 SQL (0.1ms) BEGIN AREL (0.6ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:43', `perishable_token
SQL (0.1ms) BEGIN
AREL (0.6ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:43', `perishable_token` = 'rGvsUjfDYw4lrFk6bYJu', `updated_at` = '2012-06-22 22:02:43' WHERE `users`.`id` = 6697
SQL (91.8ms) COMMIT
User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6697 LIMIT 1
SQL (0.2ms) BEGIN
AREL (0.5ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:43', `perishable_token` = 'CHSKWhMmNHB5h8HeAWI', `updated_at` = '2012-06-22 22:02:43' WHERE `users`.`id` = 6697
SQL (43.2ms) COMMIT
User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6697 LIMIT 1
SQL (0.2ms) BEGIN
AREL (0.5ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:44', `perishable_token` = 'yDEGFCy4JrKrLVOKhwP', `updated_at` = '2012-06-22 22:02:44' WHERE `users`.`id` = 6697
SQL (43.4ms) COMMIT
User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6697 LIMIT 1
SQL (0.1ms) BEGIN
AREL (0.3ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:44', `perishable_token` = 'TSrzZCKL2C0R5BPJAkVA', `updated_at` = '2012-06-22 22:02:44' WHERE `users`.`id` = 6697
SQL (36.6ms) COMMIT
User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 6697 LIMIT 1
SQL (0.1ms) BEGIN
AREL (0.3ms) UPDATE `users` SET `last_request_at` = '2012-06-22 22:02:44', `perishable_token` = 'hfRuoHYvIQZCdd8obtA', `updated_at` = '2012-06-22 22:02:44' WHERE `users`.`id` = 6697
SQL (38.4ms) COMMIT
我四处寻找,找到了一个解决办法:
UserSession.last\u请求\u阈值=10分钟
据我所知,设置这个的位置是在UserSession中。(这也可以在initalizer中设置,如authlogic.rb)
存在多个更新的原因是,它会在每次对当前用户进行某种检查时更新上次请求。例如,当您对某种工作流程使用登录状态时,即仅为登录的用户显示菜单项或页面的一部分
一旦您将last_request_设置为更大的阈值,您就可以摆脱这些更新。对我来说,这就省去了大约10条更新语句——每条都需要大约0.5毫秒——这算不上一个大his,但考虑到我有100个用户(内部应用程序)——一直在使用这个应用程序,我不需要跟踪他们最后的请求(他们要么在大楼里,要么不在大楼里),我可以限制它,甚至完全停止跟踪它——在一天的时间里,我不需要对数据库进行成千上万次的额外更新——并且使读取日志变得更容易
更新
即使您将其设置为1秒-这仍然会有帮助-因为现在它只会在每个请求中更新一次(假设您的应用程序没有超过1秒的请求-如果您这样做可能是另一个问题的迹象),即使您在同一请求中多次检查当前用户。我怀疑是否有人能在同一秒钟内完成多个不同的请求
希望这有帮助
附言:这是让我走上正确道路的问题:你找到原因了吗?我也看到了同样的问题。