PHPで書かれたアプリがあります。フロントエンドはjavascriptを多用しています。一般に、ページのリロードが必要な通常のアプリケーションの場合、継続的なデプロイは実際には問題になりません。理由は次のとおりです。
- アプリは、ビルド タグを使用してデプロイできます:
myapp-4-3-2013-b1
、myapp-4-3-2013-b2
など。 - ユーザーがページをロードすると (フロント コントローラー パターンを使用しています)、ビルドタグを挿入でき、正しいビルド タグを使用してアプリ ディレクトリからファイルがロードされます。
- 古いリクエストが終了すると、新しいビルド タグに移動するため、古いビルドを長時間保持する必要はありません。
- データベースとユーザー データに互換性がないという問題は、リクエストが完了した後に新しいビルドに移動するため、それほど高くはありません (これについては後で詳しく説明します)。
さて、私たちのアプリの問題は、スムーズなページ読み込みのために AJAX を多用していることです。さらに、ユーザーがアプリケーションをナビゲートするときにページがまったく更新されないため、ブラウザーが更新されていない限り、保存されていないデータを現在のブラウザー セッションに保持し、再度アクセスすることができます。
継続的な展開を実現したい場合、これはより大きな問題につながります。
ユーザーのビルドタグをセッションに保持し (ユーザーが最初のリクエストを行ったときに設定)、ログアウトして再度ログインした後にのみ新しいビルドタグに切り替えることができます。データベース スキーマが変更されたり、ディスクに書き込まれるファイルの形式が新しいビルドで変更されたりすると、これを調整する方法がないため、これは明らかに悪いことです。
すべての新しいリクエストを新しいビルド タグに強制しますが、クライアント側の JavaScript を変更する可能性があり、セッションを持つすべての人に新しいビルド タグをすぐに強制すると、多くのことが壊れる可能性があります。
明らかに、プッシュするすべてのビルドで上記が発生するわけではなく、多く発生しないことを願っていますが、テストに合格したすべてのビルドをデプロイできるように、フールプルーフ プロセスを構築したいと考えています。同時に、デプロイされてテストに合格したすべてのビルドが、セッションを実行しているクライアントで不注意に中断され、多数の問題が発生しないようにしたいと考えています。
私はいくつかの調査を行いました.Googleが(少なくともGoogleグループで)行うことは、クライアントにメッセージをプッシュしてアプリケーション(ブラウザウィンドウ)を更新することです。ただし、その場合、保存されていないクライアント側のデータ (保存されていないメッセージなど) はすべて失われます。
最近、AJAX とローカル データを使用するアプリケーションが非常に一般的であることを考えると、ユーザー/クライアントへの混乱を最小限に抑える、これを処理するよりインテリジェントな方法は何ですか?