3

我们使用带有设计和 cancancan gem 的 Rails。我们的用户会话使用 ActiveRecord SessionStore 存储。

在我们的前端 (JavaScript) 代码中,我们最近开始使用 Web Worker 向我们的后端发出 Ajax 请求。这意味着这些请求不再与来自“主”线程的请求属于同一会话。

反过来,这意味着我们的数据库会话表会随着来自不需要保留的 web worker 请求的“临时”会话而快速增长。这些临时记录的增长速度远高于我们之前的增长速度,所以我们想摆脱这些不必要的记录。

我们可以在后端收到来自网络工作者的请求时识别它们。

删除不需要的记录的一种方法是

  1. 创建我们自己的 SessionStore 类并添加一个属性来指示特定会话的临时性质
  2. 有一个计划任务删除这些记录。

我们认为这是一个“B计划”。

我们希望在请求处理结束时删除临时会话。我们在应用控制器的 after_action 中添加了销毁会话的代码;

# application_controller.rb
after_action :clean_temporary_session

def clean_temporary_session
  session.destroy if is_temporary_session?
end

这确实会导致会话记录的删除,但是,在删除记录后会立即创建一条新记录,因此记录的数量仍在不断增长。

我们如何在请求结束时删除临时会话记录?

4

0 回答 0