【问题标题】:Rails devise cache refreshed at every requestRails 设计在每次请求时刷新缓存
【发布时间】:2020-11-13 01:45:39
【问题描述】:

我正在使用 Rails 6、Devise 和 Redis 进行缓存。 如果我跑

redis-cli 监视器

我看到 Rails 尝试获取密钥并刷新缓存。即使我只是重新加载同一页面或在同一用户登录会话期间更改网页。也许是因为用户模型上的 utm 和 referrer 字段? utm/referrer 在用户注册时填写,它们永远不会改变。

这是一个问题,因为当我只需要“get”时,我执行了“get”/“set”操作。

1604411976.019840 [0 [::1]:50683] "get" "_session_id:2::252360dc050fb8d65e84a43a7a55da72ce1428fbdde4d9cda696296e3bdb130d"

1604411978.440996 [0 [::1]:50683] "设置" "_session_id:2::252360dc050fb8d65e84a43a7a55da72ce1428fbdde4d9cda696296e3bdb130d" "\x04\bo: ActiveSupport::Cache::Entry\t:\x0b@value{\n​​I"\x0fsession_id\x06:\x06ETI"%45f803f32b1a89b8d6b0fc38ff90b00c\x06;\aTI"\x19warden.user.user.key\x06 ;\aT[\a[\x06i\x06I""$2a$11$6p01wAYCqmAGsjxzT40z8O\x06;\aTI"\butm\x06;\aT{\n:\x0bsource0:\rcampaign0:\x0bmedium0:\x0ccontent0:\tterm0I" \x10_csrf_token\x06;\aTI"1SzDbADoyFrsa/DwWutlecf+7RiSURygsxiU5+XL/o5c=\x06;\aTI"\rreferrer\x06;\aT"Ehttp://localhost:3000/en/profiles/34/items/35940: \r@version0:\x10@created_atf\x161604411978.440767:\x10@expires_in0

配置/设计

config.skip_session_storage = [:http_auth]

app/models/user.rb

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable,  and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :trackable

Schema.yml

create_table "users", force: :cascade do |t|
        t.string "email", default: "", null: false
        t.string "encrypted_password", default: "", null: false
        t.string "reset_password_token"
        t.datetime "reset_password_sent_at"
        t.datetime "remember_created_at"
        t.datetime "created_at", null: false
        t.datetime "updated_at", null: false
        t.string "locale"
        t.integer "sign_in_count"
        t.datetime "current_sign_in_at"
        t.datetime "last_sign_in_at"
        t.string "current_sign_in_ip"
        t.string "last_sign_in_ip"
        t.string "stripe_id"
        t.string "paypal"
        t.decimal "referral_commission"
        t.date "trial_end_date"
        t.string "coupon_code"
        t.json "utm"
        t.string "referrer"
        t.index ["email"], name: "index_users_on_email", unique: true
        t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
      end

config/application.rb

config.middleware.insert_after ActionDispatch::Static, Rack::Deflater
config.session_store :cookie_store, key: '_interslice_session'
config.middleware.use ActionDispatch::Cookies # Required for all session management
config.middleware.use ActionDispatch::Session::CookieStore, config.session_options

问题不是由控制器引起的。没有代码。 app/controller/application_controller.rb

class ApplicationController < ActionController::Base
 # It happens even when I remove everything from here and page controller
end

class PagesController < ApplicationController
   def test
     render json: "ok"
   end
end

【问题讨论】:

  • 我很惊讶到目前为止没有人在这里回答:从我的角度来看,几乎不可能帮助你解决这个问题,除非你也分享至少一点代码(可能在控制器中,因为这是您处理会话的地方,对吗?)您与缓存存储交互的地方。
  • 我创建了一个干净的控制器并从应用程序控制器中删除了所有代码,它仍然会发生。我还能在哪里看?
  • 这不是redis的一个“特性”,而不是devise/cookies吗?
  • 我认为这是由设计引起的,因为它只在每次页面加载时发生在用户对象上。可能是因为 current_user 对象在每个请求中都是不相等的,并且每次都以不同的方式序列化。所以redis找不到以前的key,它会创建一个新的key。但我不知道为什么它总是不同,从哪里看

标签: ruby-on-rails devise


【解决方案1】:

似乎 rails 使用它自己的字段来过期而不是本地 setx 用于 redis。 如果您注意到,活动记录缓存中的最后一个字段是 expires_in0

你有 3 件在这里玩。 redis、devise 和 rails,必须找出哪个配置错误。 试试:

  • 以秒为单位为您用于缓存的 expires_in 外观传递一个数字
  • 检查 session.rb 和 cache.rb 的默认过期时间
  • 尝试缓存其他内容,看看是否有效

【讨论】:

  • 1) 这是由设计完成的,不知道在哪里。 2) 我在哪里可以找到 session.rb/cache.rb ?我没有这样的文件.. 3)缓存其他东西它可以按预期工作
【解决方案2】:

这些写入是对session 更改的结果(数据为Marshal.dumped)。

示例中的某些字节看起来被破坏了,但看起来您已将 referrer 写入会话(示例中为 http://localhost:3000/en/profiles/34/items/35940),这显然会在导航时发生变化,因此可能会导致写入。

奇怪的是你有session_store = :cookie_store,但是当cache_store被启用时会话通常被写入redis

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2017-04-11
    • 2018-07-26
    • 1970-01-01
    相关资源
    最近更新 更多