Rails 会话变量工作了一段时间,然后突然停止工作

问题描述 投票:0回答:1

更新 我刚刚完成了“service ntp start”来纠正 ubuntu 服务器上的计时问题。现在可以登录了...但我必须给它一些时间看看这是否能解决问题。

描述 我有一个 Rails 应用程序,已经运行了几个月没有问题,但突然我无法登录。当发生这种情况时,基于容器的应用程序和本机运行的本地开发人员版本会同时发生。两个安装都在 VirtualBox 中的同一个 Ubuntu VM 上运行。服务器重新启动将使一切恢复正常一段时间。昨天我离职时还可以,但今天就不行了。我是这些本地安装的应用程序的唯一用户。其目的是为了发展。该应用程序的用户尚未看到此问题,但我想确保这种情况不会发生在他们身上。

版本

  • Ubuntu 20.04.4 LTS
  • 虚拟盒7.0.12
  • 导轨 6.1.7.6

session_store.rb

Rails.application.config.session_store :cookie_store, expire_after: 1.hour

我使用

session[:user_id]

存储和检索

观察

  • 会话控制器:日志清楚地表明会话已存储并且可以检索变量:user_id。 session.id 显示对象 ID。当 session_controller 完成时 - 一切都正常。
  • 当我重定向到主页时,会话信息消失了。没有变量,连session.id都是nil。
  • 将代码库更改为早期版本没有效果
  • 当问题出现在基于容器的应用程序中时,同样的问题也会出现在 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 次,但突然容器无法再看到新的编辑,即使在重新启动后也是如此。奇怪。

对我来说,这似乎是一个非应用程序问题。服务器损坏? 还有什么可以尝试的 - 放大实际原因吗?谢谢。

ruby-on-rails virtualbox
1个回答
0
投票

这似乎是 Ubuntu 服务器上的计时问题。

解决方案

service ntp start

我做了一些测试来确认,并设定了一个过去的时间。登录将再次失败。我测试了未来的日期,比今天早了很多天。这实际上会起作用。因此,只有当服务器时间落后于当前时间(可能是浏览器访问服务器的时间)时,它似乎才会失败。

  • 我需要监控这项服务,因为它似乎不时停止。
  • 我还将尝试将服务器时间与浏览器时间进行比较,并在用户界面中显示错误,告知时间错误。这样可以更快地找到正确的解决方案。
© www.soinside.com 2019 - 2024. All rights reserved.