gpt4 book ai didi

ruby-on-rails-3 - AuthLogic 似乎为一个请求多次更新用户记录

转载 作者:行者123 更新时间:2023-12-04 20:50:26 27 4
gpt4 key购买 nike

对于一个操作请求,我看到大约 6 个计数似乎是 User 模型的 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_request_at_threshold = 10.minutes



据我所知,设置这个的地方 - 在 UserSession 中。 (这也可以在初始化器中设置,如 authlogic.rb)

有多个更新的原因是它更新 last_request_at 当您对 current_user 进行某种检查时。例如,当您将登录状态用于某种工作流程时 - 即仅为已登录的用户显示菜单项或页面的一部分。

一旦您将 last_request_at 设置为更大的阈值 - 您就可以摆脱这些更新。对我来说,摆脱了大约 10 条更新语句——每条大约需要 0.5 毫秒——不是很大,但考虑到我有 100 个用户(内部应用程序)——一直使用这个应用程序,我不需要跟踪他们的最后一个请求(他们要么在大楼里,要么不在大楼里),我可以限制它,甚至完全停止跟踪它 - 在一天的过程中,我不需要对数据库进行 10 次成千上万的额外更新 -并使阅读日志更容易。

更新

即使您将其设置为仅 1 秒 - 这仍然会有所帮助 - 因为现在它只会更新每个请求一次(假设您的应用程序没有需要超过一秒的请求 - 如果您这样做可能是另一个迹象问题)即使您在同一个请求中多次检查 current_user 。我怀疑是否有人可以同时执行多个不同的请求。

希望这可以帮助

P.S.:这是让我走上正确道路的 q: AuthLogic perishable_token resets on every request

关于ruby-on-rails-3 - AuthLogic 似乎为一个请求多次更新用户记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11164820/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com