【发布时间】:2014-10-17 06:13:22
【问题描述】:
在 Rails 应用程序中,随着生产数据库的增长,会不时创建大量会话。作为一种解决方法,我不时删除会话。我想解决这个问题,但我不知道如何调试这样的情况。会话数据非常小,所以我可以切换到 cookie 存储,但这并不能解决问题。调试这种情况的最佳技术是什么?创建大量新会话的原因可能是什么?
我是该应用程序的唯一用户,它在本地虚拟盒子上运行,但其他人可以看到。我的上下文是:
- Rails 4.0.0(最近没时间升级)
- SQLite3
- 红宝石 1.9.3p547
问完问题后,我开了个会(所以没有积极使用 Rails 应用程序),当我回来时,一个查询
sqlite> select created_at, updated_at from sessions where updated_at > "2014-10-17";
显示如下结果:
2014-10-17 07:49:56.202187|2014-10-17 07:49:56.202187
2014-10-17 07:50:26.039702|2014-10-17 07:50:26.039702
2014-10-17 07:50:56.043092|2014-10-17 07:50:56.043092
2014-10-17 07:51:26.057016|2014-10-17 07:51:26.057016
2014-10-17 07:51:56.163507|2014-10-17 07:51:56.163507
2014-10-17 07:52:26.071406|2014-10-17 07:52:26.071406
2014-10-17 07:52:56.191103|2014-10-17 07:52:56.191103
2014-10-17 07:53:26.070792|2014-10-17 07:53:26.070792
因此,当请求导致新会话时,似乎有一个固定的时间表。我怎样才能找到原因?
更新:我已经集成了logging from another answer,现在日志条目与会话条目匹配。下一步是找到真正的发件人。更复杂,因为我使用 vagrant 和端口转发,所以 Rails 应用程序内的所有请求都来自同一台机器(主机)。
【问题讨论】:
-
你在使用
devisegem吗? -
不,我不知道。该 Rails 应用程序中没有实现身份验证/授权。所以知道 URL 的每个人都可以使用该应用程序(但我没有看到这种情况发生的迹象)。
-
我的第一个猜测是那些是机器人或一些轮询网站的脚本,特别是因为它们每 30 秒平均创建一次。尝试获取这些请求的 IP。
标签: ruby session ruby-on-rails-4 sqlite