ruby-on-rails - 我如何保持记录的 session 并清除内存缓存中的 session 除外的缓存

标签 ruby-on-rails amazon-web-services memcached amazon-elb

在我的系统中,有很多 web servers分享一个 cache(memcache) server .

目前,它将在每次新部署时清除内存缓存中的所有数据。

通过运行 rake memcached:flush
更重要的是,我可以看到user session在缓存服务器中,

但是每次,当我关闭 iPhone 上的浏览​​器时,我都需要一次又一次地重新登录(我一定是出了什么问题)。

我在 AWS ELB 后面设置了我的服务器和 auto scaling
我怎么能保留 ELB 后面每个服务器之间的用户 session

让用户每次回来都保持登录状态。

缓存服务器

|       8 |    2016-03-01 10:07:59 +0000 |          291 | _session_id:08f1d7e8e82055367c44372d431b7f23              |
|       8 |    2016-03-01 10:07:22 +0000 |          291 | _session_id:3553ad00c578b175d789f02dc696dd95              |
|       8 |    2016-03-01 10:04:22 +0000 |          291 | _session_id:5cc2302455981a8a5d3cea98deb80acb              |

confi/initialize/session.rb(我用 Dalli 和 memcache 保存缓存)
Rails.application.config.session_store :cookie_store, key: '_sampleA_session'
Rails.application.config.session_store ActionDispatch::Session::CacheStore, :expire_after => 6.month

查看缓存/模型缓存
- cache("common_header", skip_digest: true) do
- cache("footer", skip_digest: true) do
...

cache.rake( rake 任务)
require 'socket' 
namespace :memcached do
  desc 'Flushes whole memcached local instance'
  task :flush do
    server  = ENV['MEMCACHE_DB']
    port    = 11211
    command = "flush_all\r\n"
    socket = TCPSocket.new(server, port)
    socket.write(command)
    result = socket.recv(2)
    if result != 'OK'
      STDERR.puts "Error flushing memcached: #{result}"
    end
    socket.close
  end
end

生产.rb
  config.action_controller.perform_caching = true
  config.cache_store = :dalli_store, ENV['MEMCACHE_DB'], { :pool_size => 10 ,compress: true }

最佳答案

对于您的两个 View 片段缓存,您可以执行以下操作( docs ):

expire_fragment("common_header")
expire_fragment("footer")

这应该会使缓存的片段无效,因此更新您从该片段中的模型读取的值(因为片段被重新渲染)。如果这就是您对模型缓存的意思,那么您就可以开始了。如果您还想清除 SQL 查询缓存(虽然我不知道您为什么要这样做,因为 Rails 会自动使此无效)您可以引用 this博客文章。

关于ruby-on-rails - 我如何保持记录的 session 并清除内存缓存中的 session 除外的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283423/

相关文章:

ruby-on-rails - 有没有办法向 Rails 脚手架生成器添加规范/功能

ruby-on-rails - 在 Rails 应用程序中使用带有 Chartkick 的实例方法

php - Memcache在php中获取,单键和多键在一个函数中?

java - 无法连接到 AWS IoT 服务,MqttException - javax.net.ssl.SSLHandshakeException : Received fatal alert: certificate_unknown

amazon-web-services - 云形成 : Waiter StackCreateComplete failed: Waiter encountered a terminal failure state

c# - 使用反射获取方法名和参数

c - 为 Win32 重新缓存 - 有人构建过它吗?

ruby-on-rails - class_instruction 中的学生和教师

ruby-on-rails - 警告 : Running `gem pristine --all` to regenerate your installed gemspecs

ios - 我无法在 ios8 中将图片上传到亚马逊服务器?