更新确认是服务器的计时问题。已发布答案。
描述我有一个Rails应用程序,已经运行了几个月没有问题,但突然我无法登录。当这种情况发生时,它同时发生在基于容器的应用程序和本地开发人员版本上。这两个安装在VirtualBox中的同一个Ubuntu VM上运行。服务器重启会让事情再次工作一段时间。昨天离开办公室时,它工作了,但今天它不起作用。我是这些本地安装的应用程序的唯一用户。它是用于开发的。应用程序的用户还没有看到这个问题,但我想确保这不会发生在他们身上。
版本
- Ubuntu 20.04.4 LTS
- VirtualBox 7.0.12
- Rails 6.1.7.6
session_store.rb
Rails.application.config.session_store :cookie_store, expire_after: 1.hour
字符串
我用session[:user_id]
存储和检索
意见
- session controller:logs清楚地表明会话已被存储,并且变量user_id可以被检索。session.id显示对象id。当session_controller完成时-一切正常。
- 当我重定向到主页时,会话信息消失了。没有变量,甚至session.id也是空的。
- 将代码基更改为早期版本不起作用
- 当问题出现在基于容器的应用程序中时,同样的问题也出现在Rails本机应用程序中。
- 当我重新启动Linux服务器时,我可以再次登录。但过了一段时间,问题再次出现。
- 重新启动Linux本机rails服务器没有任何效果。
- docker-compose down和up没有效果。
- 我曾尝试清除浏览器中的cookie,但没有效果
- 更改浏览器没有影响
- 我可以毫无问题地运行所有的Rails测试,它们涉及到大量的登录.
最近的变化 - 从windows 10升级到windows 11. hyper-v是自动安装的,但我删除了它,以避免VirtualBox被模拟。
- VirtualBox从6.x升级到7.x
- 几周前升级到Rails 6.1.7.6+一个捆绑更新。但是当这个问题出现时,我可以回滚到任何版本,这没有什么区别。
可能相关 - 我直接在容器中编辑了一些文件,以解决问题并插入一些put语句。重新启动会拾取编辑。我可以这样做3-4次,但突然容器再也看不到新的编辑,即使在重新启动后。奇怪。
对我来说,这看起来像是一个非应用程序的问题。损坏的服务器?任何其他尝试-放大的实际原因?thx。
1条答案
按热度按时间u91tlkcl1#
这是由于Ubuntu服务器上的时间问题。
修复服务器日期/时间
字符串
我做了一些测试来确认,并设置在过去的时间.登录将再次开始失败.我在未来的日期测试,今天提前很多天.这实际上会工作.所以它似乎只有当服务器时间滞后于当前时间失败,可能是浏览器访问服务器的时间.