つい最近、EC-CUBE3のテンプレートの反映ができない問題で同じような相談がポツポツとあり。
ほとんどが「管理画面からテンプレートの更新をしようとしたけど反映されない。」という内容で、
反映されないというのは「エラー画面になってしまう。更新内容の反映はされているけど、フロント側(お客さんが訪れる側)には古いものが表示されたままになる。」というものでした。
EC-CUBEは、表示される内容はキャッシュとして持っていて3系も例に漏れずです。
キャッシュって何?ということから聞かれることも多かったので、改めてコトバンクから引用すると…
キャッシュとは
よく使うデータへのアクセスを速くするために、より高速な記憶装置に一時的に保存する仕組み。たとえば、アプリケーションの作業中のデータは、ハードディスクからメインメモリーに読み込んでおくことで、処理を高速化できる。また、Webブラウザーやサーバーのキャッシュ機能では、一度表示したページの内容をファイルに保存することで、次回からは、そのページをすばやく表示できる。
ってことです!つまり、テンプレートをキャッシュ化して保存しておくことで、いちいちテンプレートをコンバートして出すような処理をスキップできるので描画までの速度UPが見込めるよね!という感じですね。
テンプレート更新の流れ
管理画面からテンプレート更新時の流れは、比較的分かりやすくて、
- テンプレートを保存する
- キャッシュを削除する
の2段構えになっています。
ちなみにキャッシュはいつ作られるの?というと、キャッシュがない状態でアクセスされた時、だったかなぁと思います。
保存は出来ているなら1はスルーですね。
保存がすら出来ていない時は、twigフォルダのパーミッションとかじゃないかなーと思いますが、今回のいくつかあったご相談の中には保存すら出来ないという内容はなかったのでわかんないです。ごめんなさい!
保存後、キャッシュを消そうとしたけど消えなかったので「エラー画面になってしまう」の状態になり、結果、フロントに表示されるのはこれまであったキャッシュの内容でしかないので「フロントに反映されない。」と、なってしまいます。
ひとまず、現時点でのテンプレートの更新を有功にしたいんだ!という時は、さくっとキャッシュを削除してあげればいいです!
キャッシュの削除の仕方
ファイルを削除する
キャッシュはファイルとして存在しているものなので、そのキャッシュファイルをごっそり削除してあげれば大丈夫です。
FTPなどで接続して、~/app/cache/twigの中をごっそり消します。
今回はテンプレートの絡みなのでtwigのキャッシュを消してあげればOKです。
SSHでかっこよく消す
SSHで接続して、EC-CUBEのルートディレクトリで以下のコマンドを打てばキャッシュが消えます。
php app/console cache:clear
わぁ。かっこいい。
だいたいレンタルサーバーのSさんでの運用のお客さんだったので、SSHの解放はされていても普段使いを出来るような感じではないかなぁと思います。FTPでファイルを削除する方が楽です。ただ、削除の仕方によってはとんでもない時間がかかることがあるのでそこは覚悟しておいてください!
ところで、なんでエラー画面になったの?
キャッシュの削除時は、こんな感じになっています。
- 指定されたパスの中のディレクトリを探す。
- 指定のディレクトリを消す。
- ハッピー!
cache/twigのフォルダの中を見ると分かるのですが、結構な数のフォルダがあります。ファイル単位でいえばこれもまたむちゃくちゃ多いです。このフォルダを探し回る時にこけているようでした。このご相談を貰ったお客さんたち、全員、某Sレンタルサーバーさんだったので、探す時のメモリ制限でひっかかっているようで、サーバー(の設定制限とか)とEC-CUBEとの相性なのかもですよね。(勿論、そのショップさんの状況なんかも多分に影響を受けはするはずなので某Sレンタルサーバーさんで運用中のEC-CUBERさんみなが起きるわけでもありません。)
キャッシュ処理まわりがアップデートされるのを待ちつつ、手動で消すのが一番いいと思います。
わりと更新頻度も高くて手動でなんて消してらんねーよ派の人には、「いっそ多少負荷があってもいい!twigのキャッシュなんて保存しないでさくさく作業したい!」というのであれば、デバッグモードにすればtwigのキャッシュは無効になります。が、なにせデバッグモード。不格好なデバッグ表示がでたりするリスクはあるのでやっぱり本番には向かないかもですね。