0

我也在GitHub 上问过这个问题,但似乎没有人回答。

问题是我使用 Rack Attack 作为阻止抓取的宝石。

我的配置位于此处

我遇到的问题是将缓存写入文件系统并填满导致以下错误

No space left on device@ rb_sysopen - /var/app/current/tmp/cache/.rack%3A%3Aattack%3A5249968%3Areq%2Fip%3A104.199.176.25320191129-1869-11sg00n

我如何防止这种情况发生?

4

1 回答 1

1

gem 文档没有提供有关缓存机制的任何信息,但查看源代码会告诉您他们正在使用,Rails.cache因此您可以查看它。

根据您给出的错误,您的 Rails 应用程序似乎使用了:file_store缓存(这是默认缓存),并且Rails 文档说

由于缓存会增长直到磁盘已满,建议定期清除旧条目。

但是我发现了一个很久以前就存在的cleanup方法(我从 Rails 版本 3 到 6 检查)并且似乎知道过期数据,但是有一个错误阻止 Rails 清理已在 Rails 5.2 中修复的过期数据。如果您使用的是 Rails 5.2 和更新版本,请尝试为缓存设置过期时间:

config.cache_store = :file_store, Rails.root.join('tmp', 'cache'), { expires_in: 10.minutes }

请更新缓存路径(第二个参数)并根据expires_in您的情况调整值。

另一种选择是将Rails 缓存存储更改为Redis(使用redis-rails gem)或Memcached之类的东西。

Redis 将删除过期的键,Memcached 会在达到允许的空间限制时删除最旧的键。

于 2019-12-09T03:57:57.413 回答