如何在请求结束时删除Rails(ActiveRecord)会话

时间:2017-06-30 10:00:56

标签: ruby-on-rails ruby devise rails-activerecord session-store

我们使用Rails与设计和cancancan宝石。我们的用户会话使用ActiveRecord SessionStore存储。

在我们的前端(JavaScript)代码中,我们最近开始使用Web worker对我们的后端执行Ajax请求。这意味着这些请求不再与来自' main'的请求属于同一会话。线程。

反过来,这意味着我们的会话数据库表会随着“临时”而快速增长。来自Web工作者的会话请求不需要保留。这些临时记录的增长率远远高于我们之前的增长率,因此我们希望摆脱这些不必要的记录。

我们可以识别网络工作人员在后端收到的请求。

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

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

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

    # application_controller.rb
    after_action :clean_temporary_session
    
    def clean_temporary_session
      session.destroy if is_temporary_session?
    end
    

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

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

0 个答案:

没有答案