次のキャッシュ設定/構成を持つRails3.2アプリ(ステージング環境)のセッションから、いくつかのキー/Cookieが削除/欠落しているという奇妙な問題に直面しています。セッションストアはCookieストアであり、次のように構成されています。
Appsrv::Application.config.session_store :cookie_store, {
:key => 'SSID',
:path => '/',
:domain => APP_CONFIG['site_url'].sub(/^https?:\/\//, ""),
:expire_after => 30.minutes,
:secret => 's23asdfe443534afdgstreggv234324we434',
:secure => false # cookie not for just https
}
rails cacheストアはmemcacheストアであり、dalligemを使用してrailsとmemcacheを統合します。
次の構成がさまざまな.rbファイルに追加されました。
config.cache_store = :dalli_store, 'staging01:11211', 'staging02:11211', 'staging03:11211', 'staging04:11211'
{:namespace => "appsrv", :expires_in => 86400, :compression => true}
config.action_controller.perform_caching = true
ただし、このCookieの欠落のシナリオが発生するフローは少し複雑です。これが発生するシナリオは次のとおりです。
- ユーザーがAppsrvのページにアクセスしてセッションを開始します(rails 3.2アプリ、ユーザートランザクションを識別するいくつかの変数がこの時点でセッションに設定されています)
- 認証のために外部のウェブサイトに移動します。
- 認証が成功すると、外部WebサイトはJavaアプリケーションサーバーにリダイレクトされます。
- Java Appサーバーは認証を記録し、Appsrvにリダイレクトします。
- ただし、このリダイレクトの後、手順1で設定されたセッション変数はなくなります。
いくつかの奇妙な発見:唯一の違いが次のような開発環境では、物事は完全に機能します。
config.action_controller.perform_caching = false
ステージング「config.action_controller.perform_caching=false」に同じ設定がある場合、ステージングも正常に機能します。「config.action_controller.perform_caching」をfalseに設定しても、実際にはコントローラーとモデルでキャッシュが適切に実行されます。
したがって、質問は次のとおりです。1. config.action_controller.perform_cachingがtrueに設定されていると、セッションCookieが削除されるのはなぜですか。2. config.action_controller.perform_caching構成をfalseに設定すると、キャッシュも適切に実行できる場合、その構成の重要性は何ですか?