当我尝试将Rails版本从4升级到5时,在缓存存储设置方面遇到了一些困难
环境
Rails 5.1 版本
发生了什么?
升级至Rails 5系列后,发现在进行POST请求时出现错误导致应用崩溃。
Can't verify CSRF token authenticity.
request_forgery_protection.rb:195 handle_unverified_request : ActionController::InvalidAuthenticityToken
原因(只需一种选择)
总之,这与此有关。
由于未正确配置会话存储,导致无法正确从memcached服务器获取会话信息,进而导致CSRF令牌的认证失败。
应对
我按照这个进行了处理。
添加 cache_store 的配置
config.cache_store = :dalli_store, ['memcache_server_1', 'memcache_server_2']
修改config/initializers/session_store.rb
Rails.application.config.session_store(
ActionDispatch::Session::CacheStore,
:key => 'session_key',
:expire_after => 1.days
)
顺便提一下
更新指南中并没有找到明确的描述,但似乎从Rails 5.1开始,config/initializers/session_store.rb文件默认不再创建。不过,文件中的设置仍然有效,所以在本次处理中,我仍然建议将选项设置等内容继续写在config/initializers/session_store.rb文件中。