【发布时间】:2015-02-19 08:35:59
【问题描述】:
我继承的 Ruby on Rails 应用程序运行良好,但使用 MongoDB 进行会话存储。并且会话集合表已经超过 2 年(!!!)没有被清除,这意味着它有超过 200 万个条目,占用了大约 4GB(!!!)的空间。对于一个比 4GB 小很多的数据库来说,这不好、不需要,而且对空间的滥用令人难以置信。
因此,在研究如何清理这些东西时,我在各种网站(Stack Overflow 和其他网站)上看到了许多帖子,这些帖子解释了一般过程:
- Cleaning the sessions database store with a rake task in Rails
- Clearing out Rails Sessions
- How to clear rails sessions table
- Rails: clear old sessions stored in database
这很有意义:创建一个连接到sessions 的rake 任务,并根据updated_at 标准删除条目。一切顺利!
我的问题是这个 Ruby on Rails 应用程序使用 MongoDB 和 Mongoid 所以这些页面上提供的示例实际上都没有帮助。所以这样的事情是行不通的:
namespace :sessions do
desc "Clear expired sessions (more than 7 days old)"
task :cleanup => :environment do
ActiveRecord::SessionStore::Session.delete_all(["updated_at < ?", 7.days.ago])
end
end
该应用程序不使用 ActiveRecord,所以没有骰子。 rake 任务在 ActiveRecord 不存在的情况下终止,如果包含 ActiveRecord 则终止,因为核心数据库逻辑不依赖于 ActiveRecord 模型;都是 Mongoid。
另外使用一些人推荐的所谓的内置rake db:sessions:clear 似乎不起作用,我认为它连接到不使用 ActiveRecord 的应用程序,因此该任务甚至不存在。
如何在 Rails 3 中使用 Mongoid 创建等效查询,以从 DB 会话存储中清除明显死、旧和陈旧的会话?
【问题讨论】:
标签: ruby-on-rails ruby mongodb session