2007年3月7日
Movable Type 3.3以降をご利用の方は、MT3.3専用版をお使いください。
詳細はこちらのページを参照してください。
今日は、Perl版ダイナミック・パブリッシングの最後として、キャッシュ機能をオンにする方法を解説します。
また、キャッシュのクリアについても述べます。
なお、一昨日のエントリーでも解説したように、SQLiteの場合はキャッシュ機能は使うことができません。
したがって、SQLiteの方は、今日のエントリーの作業は不要です。
1.データベースアクセス用テンプレートの作成
まず、データベースアクセス用テンプレートを作成します。
Zipファイルを解凍すると、その中に「sqlsub_mysql.php」(MySQL用)と「sqlsub_pgsql.php」(PostgreSQL用)のファイルがあります。
インデックステンプレートを1つ作り、お使いのデータベースに合うファイルの内容をすべて貼り付けます。
そして、「テンプレートの名前」および「出力ファイル名」を、貼り付けたファイルの名前(「sqlsub_mysql.php」など)と同じにしておきます。
テンプレートを作り終わったら、「インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する」のチェックをオフにしてテンプレートを保存し、再構築しておきます。
2.キャッシュ用テーブルの初期化
次に、キャッシュ用テーブルを初期化します。
解凍したファイルの中に、「mt-dpcache-load.php」ファイルがあります。
インデックステンプレートを1つ作成し、このファイルの内容をすべて貼り付けます。
そして、「テンプレートの名前」および「出力ファイル名」を「mt-dpcache-load.php」にします。
次に、テンプレートの2行目にある「$dppass = "password";」の文を書き換え、初期化の際のパスワードを決めます。
例えば、パスワードを「mypassword」にするなら、この文を「$dppass = "mypassword";」に書き換えます。
テンプレートを作り終わったら、「インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する」のチェックをオフにしてテンプレートを保存し、再構築します。
そして、以下のURLにアクセスします。
http://BlogのURL/mt-dpcache-load.php?mode=init&pass=上で設定したパスワード
例えば、BlogのURLが「http://www.hogehoge.com/blog」で、パスワードを「mypassword」に設定した場合は、以下のURLにアクセスします。
http://www.hogehoge.com/blog/mt-dpcache-load.php?mode=init&pass=mypassword
「キャッシュ用テーブルを初期化しました。」と表示されれば、キャッシュ用テーブルの初期化は完了です。
3.キャッシュファイル格納用ディレクトリの作成
Blogの出力先ディレクトリの中に、「phpcache」という名前のディレクトリを作ります。
そして、そのパーミッションを「707」に書き換えます。
4.mt-dynamic.phpの書き換え
昨日の手順の中で、「mt-dynamic.php」というテンプレートを作りました。
このテンプレートを一部書き換えて、キャッシュ機能をオンにします。
書き換えるのは以下の2箇所です。書き換えが終わったら、このテンプレートを保存して再構築します。
・3行目「$is_use_cache = 0;」
この行を「$is_use_cache = 1;」に変えます。
・7行目「$max_cache_size = 10000000;」
キャッシュに使うディスク容量を指定します。
例えば、キャッシュとして50MBの容量を使う場合は、この文を「$max_cache_size = 50000000;」に変えます。
キャッシュの容量を多くすれば、それだけ多くのページをキャッシュしておくことができますので、ページをすばやく表示できる確率が上がります。
なお、キャッシュするページが増えて、キャッシュ容量の上限を超えると、キャッシュ内でもっとも古くからあるファイルから順に自動的に削除されます。
5.作業完了
ここまでの作業が終わると、キャッシュ機能がオンになり、一度アクセスされたページは、Blogに何か変更が加わるまでは再構築されなくなります。
6.キャッシュのクリア
時々ですが、キャッシュが壊れることがあるようです。
そのような場合は、以下のアドレスにアクセスすると、キャッシュをクリアすることができます。
http://BlogのURL/mt-dpcache-load.php?mode=clear&pass=手順2.で設定したパスワード
キャッシュをクリアすると、キャッシュ用テーブルの内容と、キャッシュされているHTMLファイル(phpcacheディレクトリのファイル)が削除されます。
7.複数のBlogを管理している場合
1つのMTで複数のBlogを管理していて、それらでPerl版ダイナミック・パブリッシングを使っている場合、キャッシュをクリアすると、キャッシュ用テーブルはすべてクリアされます。
しかし、phpcacheディレクトリは、mt-dpcache-load.phpを含むBlogのもののみクリアされます。
それ以外のBlogのphpcacheディレクトリは、お手数ですが手動で削除してください。





![Hardcore Will Never Die, But You Will [Bonus Tracks] Hardcore Will Never Die, But You Will [Bonus Tracks]](http://userserve-ak.last.fm/serve/34s/67192634.jpg)



コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
たびたび申し訳ありません。
サーバはさくらを利用しているのですが、同じアカウント内の別のサブドメインに移動しました。
mt-config.cgiを書きなおしたりして、管理画面でも変更しました。
その際、再度perl版の設定を一からやり直した所、
このエントリーの2項の部分の作業中に
「キャッシュ用テーブルの初期化に失敗しました」との
メッセージが出ました。
それまでは、問題なく進んできたのですがどの部分のエラーなのかわかりません。
phptempやphpcacheというディレクトリも削除してからdynamic_init.plのテンプレートなどの作成から作業しています。
毎回すいません、アドバイスお願いたします。
現在新しいサイトが閲覧ができないのでURLを記入しませんでした。
>にうさん
こんにちは。
すでに、データベースにキャッシュ用テーブルがあるので、そのようなメッセージが表示されています。
初期化ではなく、キャッシュをクリアしてください。
壱さん、お返事ありがとうございます。
初期化は同じデータを使用する場合1度でいいんですね。
てっきり、URLの変更でもしなきゃいけないのかと思っていました。
きちんと理解できてない証拠ですね。
もっと勉強します。
おかげさまで終了しました。
他で少々エラーがありますが…
ありがとうございました。
先に書いた少々のエラーなんですが、エントリー(日付)にてmt-site.jsがダイナミックパブリッシングエラーになってると、他サイトの管理人さんに教えていただきました。
(『commenter_nameは宣言されていません』というエラーです)
たぶん、URLを変更したことから起きたんだと思いますが、対処方法がわかりません。
度々の度々で大変申し訳ございませんが、改善の方法があれば教えていただきたく思います。
いつも、教えてくださいばかりでごめんなさい。
(エラー以外は見られるので、URLを記載いたします)
>にうさん
こんにちは。
mt-site.jsは、ダイナミック・パブリッシングにせずに、静的に再構築するようにしてください。
壱さん
お返事ありがとうございます。
『インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する』
にチェックを入れて再構築したら、無事表示されるようになりました。
『このテンプレートをダイナミック・ページにする 』と
『インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する』
の両方にチェックを入れていないテンプレートが多く、どれをどっちにチェックをすればいいのかよく理解できていません。
もっと、いろいろなサイトや書籍を見ながら勉強します。
数日このことで検索したりいろいろなサイトを見たりして、相当寝不足になってしまいました。
知識がないと無駄な時間過ごしてしまいますね(・・;)
改めて、このようなアドバイスしていただけるのを感謝しています。
ありがとうございます。
すみません。どうしても分からないので教えて頂けたらと思います。
こちらのプラグインを入れて、今までダイナミック・ページで表示されていたのですが、サブドメインを変更したら404エラーで「ページがみつかりません」となってしまいます。
http://●●.***.jp
のようなサブドメインでのブログURLを
↓
http://***.jp/●●/
のように普通の表示にするようにアドレスを変えただけです。
フォルダーなどは何も変えていません。
設定の「サイトのURL」を変更しただけなのですが、何か他にプラグインなどで変更するものはあるのでしょうか?
キャッシュもクリアにしたり、「.htaccess」も一度消してやり直したり何度もしてみたのですが、どうしても分かりません。
お忙しい所すみませんが考えられる事がありましたら教えて下さいm(__)m
(作成途中のサイトの為にURLは控えました)
>reiさん
こんにちは。プラグインご利用ありがとうございます。
「http://●●.***.jp」から「http://***.jp/●●」に変えたのであれば、.htaccessでmt-dynamic.phpを指定する箇所を「/mt-dynamic.php」から「/●●/mt-dynamic.php」に変える必要があります。
また、phpmyadmin等が使えるのであれば、mt_fileinfoテーブルの内容をいったんクリアすると良いと思います。
>壱さん
素早いご返答ありがとうございます。
ご指摘の通り、テーブルをクリアにして、「.htaccess」の設定を変更したら無事表示されました。
何時間も悩んで分からなかったので感動です。
本当にありがとうございましたm(__)m
藤本さんのMT本は全て買っていますし、このサイトも色々参考にさせてもらっています。
素晴らしいプラグインの数々に大変感謝しています。
この場を借りてお礼を言わせてもらいますm(..)m
また今後も楽しみにしています。
初めまして。
ここに書くのは不適切かもしれませんが、ちょっと困った状況に陥っているので聞いて頂けると幸いです。
以前からXREAサーバーでPerl版ダイナミック・パブリッシングを利用させて頂いているのですが、数日前から突然
「キャッシュファイルのコピーに失敗しました」
という表示がでて正常にページが表示されなくなりました。
ダイナミックパブリッシング機能を切ると真っ白になって表示されません。
この記事ではないのですが、どこかにXREAサーバーでそのような事が起こるとの書き込みを見た記憶があったので、もしかしたらご存じではないかと思って書き込みさせて頂きました。
何か知っていることがありましたら教えて頂けると幸いです。
>祐介さん
こんにちは。プラグインご利用ありがとうございます。
エントリーの本文にもあるように、キャッシュは壊れることがあります。
そのときはキャッシュをクリアしてみてください。
返信ありがとうございます。
キャッシュのクリアは既に試しましたが、全く変化がありませんでした。
もし他に何か可能性があれば教えて頂ければ幸いです。
>祐介さん
こんにちは。
「キャッシュファイルのコピーに失敗しました」のメッセージは、ファイルをphpcacheディレクトリにコピーすることができなかったときに表示されます。
何らかの原因で、phpcacheディレクトリへの書き込みができなくなっていると、このエラーが表示されることになります。
返信ありがとうございます。
本日確認したところ、正常に表示されていました。
サーバーの一時的な不具合か何かであったのかもしれません。
大変お騒がせ致しました。
また、ご丁寧にお答え頂きありがとうございます。
今後もプラグインを利用させて頂くつもりですので、また何かありましたらその時は宜しくお願いします。
このエントリーを参考に再構築不要化カスタマイズしてみたところ、
MT4iで使用しているフォルダまで影響を受けてしまいました。
何か対策はありませんでしょうか?
>U1さん
こんにちは。プラグインご利用ありがとうございます。
影響が出たということですが、具体的にどういった影響でしょうか。
また、そちらのサイトのURLもお教えください。
MT4iは本体のファイル名をindex.cgiなどに変更できるのですが、
blog/k-tai/ のようにスラッシュで終わるアドレスの場合、
index.php を探してしまい、表示できませんでした。
最終的に、k-taiディレクトリのhtaccessにDirectoryIndexを
設定したら表示されるようになりました。
お騒がせして申し訳ありませんでした(^^;
プラグインのおかげで、再構築エラーがでなくなり助かっています。