ruby-on-rails - Rails是否可以优雅地处理缓存存储中断(memcached)?

标签 ruby-on-rails ruby-on-rails-4 heroku memcached rackattack

我对使用https://github.com/kickstarter/rack-attack抑制滥用者和暴力攻击者感兴趣。我的应用程序在多个dyno上运行,因此我想Rails的默认FileStore不能完全有效,因为每个dyno都有一个文件系统,并且节流必须是两者的总和。

如果我要对Rails.cache使用memcached插件服务,那么如果memcached服务出现故障(例如对FileStore说),Rails会内置“后备”功能吗?

如果不是,则随着memcached服务的中断,rails应用程序是否会崩溃或无法被用户访问(与正常处理错误相比)?

最佳答案

我是机架攻击的作者。

tl; dr:当您的缓存后端(memcached或redis)关闭时,所有请求都将被允许(即fail-open)。

这实际上取决于Rails缓存的功能。 Dalli memcached客户端(ActiveSupport::Cache::DalliStore)和Redis客户端(ActiveSupport::Cache::RedisStore)都抢救连接错误和超时以返回nil

当机架攻击向高速缓存存储区查询限制值时,高速缓存存储区将返回nil。机架攻击将to_i转换为0。并且由于您的 throttle 限制> 0,因此允许该请求。

机架攻击has integration tests在每次提交测试上运行,不会引发任何错误,并且在不可用memcached/redis时允许请求。

关于ruby-on-rails - Rails是否可以优雅地处理缓存存储中断(memcached)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586643/

相关文章:

ruby-on-rails - 控制台未加载服务器

ruby-on-rails - 覆盖SecurePassword的验证错误消息

ruby-on-rails - 回调是如何调用的?

ruby-on-rails-4 - 多级accepts_nested_attributes_for时的Rails 4强参数

ruby-on-rails - 无效的单表继承类型:Rails

c# - 绑定(bind)到 Heroku 动态 $PORT 并不断出错?

ruby-on-rails - 获取数组内元素的距离?

mysql - 如何根据 bool 值对同一字段进行两次计数?

macos - 警告 : Your version of git is 1. 9.3。存在严重的安全漏洞

ruby-on-rails - 如何用开发数据填充生产数据库(heroku)? ( rails )