我也在GitHub上问过这个问题,但似乎没人在回答。
问题是我正在使用Rack Attack作为阻止抓取的宝石。
我的配置位于here
我遇到的问题是它正在将缓存写入文件系统并填满导致以下错误
No space left on device@ rb_sysopen - /var/app/current/tmp/cache/.rack%3A%3Aattack%3A5249968%3Areq%2Fip%3A104.199.176.25320191129-1869-11sg00n
如何防止这种情况发生?
答案 0 :(得分:0)
gem文档没有提供有关缓存机制的任何信息,但是查看源代码会发现they're using the Rails.cache
,因此您可以进行查看。
根据您给出的错误,您的Rails应用程序似乎使用了:file_store
缓存(这是默认缓存)和the Rails documentation says:
由于缓存将一直增长到磁盘已满,因此建议定期清除旧条目。
但是我发现a cleanup
method出现了一段时间(我从Rails版本3到6进行了检查),并且似乎知道过期的数据,但是a bug preventing Rails to clean expired data在Rails 5.2中已得到修复。 。如果您使用的是Rails 5.2及更高版本,请尝试设置缓存的过期时间:
config.cache_store = :file_store, Rails.root.join('tmp', 'cache'), { expires_in: 10.minutes }
请更新缓存路径(第二个参数),并根据情况调整expires_in
值。
另一种选择是将change the Rails cache store改成Redis(使用redis-rails gem或Memcached之类的东西。
当达到允许的空间限制时,Redis将删除过期的密钥,而Memcached会删除最旧的密钥。