Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 AuthLogic似乎为一个请求多次更新用户记录_Ruby On Rails 3_Session_Authlogic - Fatal编程技术网

Ruby on rails 3 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

对于一个操作请求,我看到大约6次用户模型的AuthLogic相关记录更新。我想知道这是否正常,或者其他人是否遇到过这种情况,我能做些什么。我仍在努力寻找原因,但我高度怀疑这与AuthLogic有关

正如您所看到的,记录的更新非常缓慢,在一个请求中发生所有这些情况令人担忧

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秒的请求-如果您这样做可能是另一个问题的迹象),即使您在同一请求中多次检查当前用户。我怀疑是否有人能在同一秒钟内完成多个不同的请求

希望这有帮助


附言:这是让我走上正确道路的问题:

你找到原因了吗?我也看到了同样的问题。