先日、SOY Shopのユーザからの連絡で、



本来はこのようにコンテンツが表示されるべきページで、



このようにコンテンツが表示されない中途半端な出力のまま、本来の表示に戻らない

ということがありました。


話は長くなりますので、先に結論だけ伝えておきますと、

キャッシュファイルの生成の失敗の際、ただちにキャッシュファイルを削除して再生成する仕組みを追加しました。




上記のページはクレジットカードでの支払いのページで、

SOY Shopのカートページの一種になります。


カートページが出力される仕組みは、

ページの中心部のコンテンツの個所がSOY2HTMLによってキャッシュファイルが生成された後出力し、

同時に大枠の個所もSOY2HTMLによってキャッシュファイルが生成された後出力され、

二つ以上のキャッシュファイルが合わさって一つのページになり表示されます。

※shop:moduleも個々でキャッシュファイルを生成する

SOY CMSを介さずにSOY2HTMLを使ってみる


今回報告があった症状は、

カートの一ページで出力される複数のキャッシュファイルの生成の内、

クレジットカードの入力画面の個所のみ文字列が抜けた状態でキャッシュファイルが生成された

ということが原因でした。


キャッシュファイルの更新はシステム側が設けたファイルの寿命以降か人為的にキャッシュファイルを消したタイミングしか実行されず、


白紙のキャッシュが生成されたことを運営者が気付かなければ、

しばらくの間はクレジットカード番号の入力画面が表示されないという状況が続いてしまいます。

これは致命的な機会損失になります。




実は今回の症状は、

当サイトも一番安いVPSサーバでギリギリまで運営していた頃に頻繁に発生していました。


検証はしていないが特にDropboxでバックアップした直後にアクセスがあった時に発生していたらしく、

バックアップ直後に自動でバックアップを行うことによって発生頻度が大幅に減少しました。

SOY CMSのサイトのバックアップをDropboxで行う

さくらの追加ストレージ(NFS)内のファイルをDropboxで同期したい


おそらくメモリの瞬間的な使用量がキャッシュファイル生成の成功に関与している可能性がありそうです。


サイトを運営しているとひょんなところから負荷が大きくなる瞬間というものがあって、

その度にキャッシュファイルの生成の心配をするのは大変なので、

ページを表示する直前でキャッシュファイルの質をチェックして、

キャッシュファイルの生成が失敗していたら削除して、ただちに再生成する

という仕様を追加してみました。


これでショップの繁盛期やサイトのバックアップといった負荷の大きなタイミングに運営者がネットに接続出来なくても、サイト訪問者が閲覧するタイミングでキャッシュの再生成が可能となります。


今回対応分を含んだパッケージはSOY CMSとSOY Shopのどちらでも対応していて、

下記のサイトからダウンロード出来ます。

https://saitodev.co/soycms/

https://saitodev.co/soycms/soyshop/