AWS ロード バランサーの背後にある 2 つのサーバーで実行されている SilverStripe のインスタンスがあります。セッション情報を共有するために、Elasticache Redis サーバーを実行しています。私は自分のphpセッションストア情報を次のように設定しています:
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379');
CMS の管理セクションにサインインした後、サーバー間をジャンプして記憶することができますが、CMS でセクションを切り替えると、メイン セクションがレンダリングされません (AJAX 呼び出し)。私が言えることから、他のサーバーが認識していないこと (2 番目に要求したもの) は既に CMS 管理者がロードされており、応答ヘッダーで JS 依存関係の新しいバージョンをロードするように指示されており、それが管理者を追い出します。読み込まれません。
ドキュメントを読むSilverStripe は、いくつかの追加情報のために Zend_Cache を使用しています。管理インターフェイスをロードしてからキャッシュディレクトリを削除すると、問題が再現されると思います。そうではありません。
次に、このモジュールを使用して、Zend_Cache が使用しているストレージ エンジンを変更しようとしました。追加した:
SS_Cache::add_backend(
'primary_redis',
'Redis',
array(
'servers' => array(
'host' => 'localhost',
'port' => 6379,
'persistent' => true,
'weight' => 1,
'timeout' => 5,
'retry_interval' => 15,
'status' => true,
'failure_callback' => null
)
)
);
SS_Cache::pick_backend('primary_redis', 'any', 10);
私の mysite/_config.php に、これはいくつかの cms 情報を key のように redis に保存CMSMain_SiteTreeHints9b258b19199db9f9ed8264009b6c351b
していますが、負荷分散された環境でサーバー間で変更する問題はまだ解決されていません。
SilverStripe は他にどこにキャッシュ データを保存できますか? モジュールを正しく実装しましたか?