お知らせ

これだけは知っておきたい Webアプリケーションの常識 2008年3月28日

これだけは知っておきたい Webアプリケーションの常識」が発売されました。
Webアプリケーションを作る上では、HTTPのプロトコルや、開発言語、データベースなど、さまざまな知識を組み合わせることが必要になります。
それらを全般的にまとめた一冊です。
Webアプリケーション開発にチャレンジしたい方や、実際に開発までしないまでも基礎知識として知っておきたい方にお勧めです。

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

再構築を不要にするカスタマイズ(ページキャッシュ機能追加)

| コメント(27) | トラックバック(8)

2005年12月19日 MySQL/PostgreSQL/SQLite全対応版を公開しました。こちらをお使いください。

以前に、「再構築を不要にするカスタマイズ(Perl版ダイナミック・パブリッシング)」を公開しましたが、それを改良しました。

これまでは、ページにアクセスがあるたびに、そのページを動的に再構築していました。
しかし、これだとWebサーバに負荷がかかりますし、またページの表示にも時間がかかります。

そこで、ページをキャッシュするようにしました。
再構築したページはキャッシュに保存し、Blogに何か変更が加わるまでは、キャッシュからページを読み込んで表示するようにしました。
なお、「Bl;ogの変更」とは、以下のような場合を指します。

・エントリーを編集する
・コメントやトラックバックを受信する
・テンプレートを変更する

ページをキャッシュすることによって再構築の回数が減り、Webサーバの負荷が下がります。
また、キャッシュに入っているページは、通常のHTMLとほぼ同程度の速度で表示されます。

キャッシュの分だけWebサーバーのディスク容量を消費しますが、キャッシュの容量は自由に設定できるようにしてあります。

導入の手順は以下の通りです。

1.システムの条件

Perl版ダイナミック・パブリッシングを動作させるには、以下の環境が必要です。

  • Movable TypeのデータベースをMySQLで管理している
  • WebサーバーがPHPに対応している
  • .htaccessの設定を変えることができる

2.ファイルのダウンロードと設置

以下のリンクをクリックして、ファイルをダウンロードします。

mt-dynamic.zip

ファイルを解凍すると、「GetConfig.pl」「dynamic_init.pl」「mt-dpcache-load.php」「mt-dynamic.cgi」と「mt-dynamic.php」の5つのファイルができます。
「GetConfig.pl」はプラグインのファイルです。Movable Typeのディレクトリの中の「plugins」ディレクトリにアップロードします。
また、「mt-dynamic.cgi」は、Blogの出力先ディレクトリにアップロードし、パーミッションを実行可能に変えます(一般には「705」や「755」)。
残りの3つのファイルはテンプレートですので、アップロードはしません。

3.キャッシュ用テーブルの初期化

次に、MySQLにキャッシュ用のテーブルを初期化します。
インデックステンプレートを1つ作成し、名前と出力先ファイル名を「mt-dpcache-load.php」とします。
そして、「テンプレートの中身」の欄に、解凍してできた「mt-dpcache-load.php」ファイルの内容を貼り付け、テンプレートを保存して再構築します。
再構築ができたら、「http://BlogのURL/mt-dpcache-load.php」にアクセスします。これでテーブルが追加されます。

なお、PHPをCGIとして動作させるサーバーでは(例:さくらインターネット)、テンプレートを再構築した後に、そのパーミッションを実行可能に書き換え、その後にアクセスします。

テーブルの初期化が終わったら、今作ったテンプレートは削除します。
また、Blogのディレクトリに「mt-dpchache-load.php」ファイルが出力されていますので、それも削除します。

4.初期化用テンプレートの作成

次に、インデックステンプレートを新規作成し、名前と出力先ファイル名を「dynamic_init.pl」にして、解凍してできた「dynamic_init.pl」ファイルの内容を貼り付けます。
そして、「インデックス・テンプレートを再構築するときにこのテンプレートを自動的に再構築する 」のチェックはオフにします。
ここまでが終わったらこのテンプレートを保存し、再構築しておきます。

なお、旧版のPerl版ダイナミック・パブリッシングでは、「dynamic_init.pl」を書き換えて初期設定をしていました。
一方、今回のバージョンでは、「mt-dynamic.php」内で初期化を行うようにしていて、「dynamic_init.pl」は書き換えません。

5.ダイナミックページ表示用テンプレートの作成

次に、ダイナミックページ表示用テンプレートを作成します。
インデックステンプレートを新規作成し、名前と出力先ファイル名を「mt-dynamic.php」にして、解凍してできた「mt-dynamic.php」ファイルの内容を貼り付けます。
また、「インデックス・テンプレートを再構築するときにこのテンプレートを自動的に再構築する 」のチェックはオフにします。
そして、以下の3箇所を書き換えます。

・3行目:$max_cache_size = 20000000;
キャッシュに使うディスク容量の上限を指定します。
例えば、容量の上限を50MBにする場合は、「$max_cache_size = 50000000;」にします。

なお、キャッシュ容量の上限を超えると、キャッシュ内でもっとも古くからあるファイルから順に自動的に削除されます。

・5行目:$index_filename = "index.php";
インデックスページのファイル名を指定します。
アドレスの最後がディレクトリ名で終わっている場合、アドレスの後にこのファイル名が自動的に付加されます。
例えば、「http://www.foo.com/blog/」のようにアクセスすると、自動的に「http://www.foo.com/blog/index.php」にアクセスします。

・7行目:$error404 = "<$MTBlogURL$>";
指定されたアドレスのページが見つからない場合に、自動的にあるページに移動したい場合、そのアドレスを指定します。
例えば、「$error404 = "http://www.foo.com/error.html";」にすると、指定されたアドレスのページがないときには、「http://www.foo.com/error.html」のページが表示されます。

なお、この行を変えない場合は、指定されたアドレスのページがない時には、Blogのメインページが表示されます。
また、この行を「$error404 = "";」にすると、ページがない時には「ご指定のページは見つかりませんでした」というメッセージが表示されるようになります。

ここまでの設定が終わったら、このテンプレートを保存し、再構築します。
なお、PHPをCGIとして動作させるサーバーでは(例:さくらインターネット)、テンプレートを再構築した後に、「mt-dynamic.php」ファイルのパーミッションを実行可能に書き換えます。

6.ディレクトリの作成

次に、Blogの出力先ディレクトリの中に、「phptemp」と「phpcache」のディレクトリを作成します。
そして、それらのディレクトリのパーミッションを「707」に設定します。

7.ダイナミック・パブリッシングをオンにする

次に、ダイナミック・パブリッシングをオンにします。
Movable Typeの管理画面に入り、再構築を不要にしたいBlogで、テンプレート編集の画面を開きます。
その画面の右上の方に「再構築オプション」という部分がありますが、そこを「テンプレート毎に個別に選択」をオンにします。
これで、ダイナミック・パブリッシングがオンの状態になります。

8..htaccessファイルの編集

7.の作業が終わると、Blogの出力先のディレクトリに、「.htaccess」というファイルができます。
この.htaccessファイルをいったんダウンロードして、メモ帳等で開きます。

その中に、「/○○/mtview.php」という部分が4箇所あります(○○はBlogの出力先ディレクトリ)。それらすべての「mtview.php」を、「mt-dynamic.php」に書き換えます。

書き換えが終わったら、.htaccessファイルを元の場所に再度アップロードします。

9.各テンプレートの設定

テンプレートの編集画面で、動的に出力したいテンプレートを開きます。
そして、画面の右上にある「このテンプレートをダイナミック・ページにする」のチェックをオンにします。

10.Blogの再構築

ここまでの作業がすべて終わったら、Blog全体を再構築します。
9.の設定を行ったページが正しく表示されれば、設置は終わりです。
これ以後も、テンプレートを新規作成した時には、Blogの再構築を行ってください。

なお、ここまでの設定をすると、以前のHTMLファイルは不要になります。
それらのファイルは、拡張子に「.static」が追加された状態で、Webサーバーに残っています。必要に応じて削除することができます。

トラックバック(8件)

このブログ記事を参照しているブログ一覧: 再構築を不要にするカスタマイズ(ページキャッシュ機能追加)

このブログ記事に対するトラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/262.

» mt-dynamicにキャッシュ機能が追加(CEFA::Blog)からのトラックバック

mt-dynamicがバージョンアップです。…っていってもバージョンナンバーが無いんですよね。付けてみたら如何でしょうかね? 続きを読む

» なんだか気持ちが悪い(LOVE×LOVE!?)からのトラックバック

The blog of H.Fujimoto: 再構築を不要にするカスタマイズ(... 続きを読む

» パパ記 バージョンアップ!(パパ記)からのトラックバック

ちょっと前に書いたけど、このパパ記はダイナミックパブリッシングしてたからか、PH... 続きを読む

» サイトのPHP化(水の忘れ物)からのトラックバック

最近MovableTypeを利用していて デザインの変更等が妙に重く感じるように... 続きを読む

» サイトのPHP化(水の忘れ物)からのトラックバック

最近MovableTypeを利用していて デザインの変更等が妙に重く感じるように... 続きを読む

» MT/plugin/install(PukiWiki Plus! (PukiWiki/TrackBack 0.3))からのトラックバック

高速化 MT-Dynamic 文字コード mt-jcode RSS関連 DisplayRSS mt-rssfeed:公開終... 続きを読む

» MT/3.2-ja-2/plugin(PukiWiki Plus! (PukiWiki/TrackBack 0.3))からのトラックバック

注 表示 Pagenate KotonohaLink MTCollate StyleCatcher CrossBlog ... 続きを読む

» Movable TypeをPHPにする方法(トラブル編)。(Poco a poco)からのトラックバック

◆Parse error◆ 記念すべき最初のエラーはこちら! Parse err... 続きを読む

コメント(スレッド27件,コメント27件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 さっちん : (無題)

TBPを見て、さっそく入れ替えました。
キャッシュ機能が追加され、ページの読み込みが早くなった気がします。
どうもありがとうございます。

No.2 asiamoth : (無題)

いつも素晴らしい記事を楽しみにしています。

念のため、クリーンインストールしたMT3.2で試しましたが、「キャッシュファイルのコピーに失敗しました」というエラーが出ました。

3.2には対応していない、と考えていいでしょうか?

No.3  : (無題)

>asiamothさん
こんにちは。
当方では3.2英語版で問題なく動作しています。
「キャッシュファイルのコピーに失敗しました」というエラーが出たということですので、以下の点をご確認ください。

1.Blogの出力先ディレクトリの中に「phpcache」ディレクトリを作ったかどうか
2.そのディレクトリのパーミッションを707に設定しているかどうか

No.4 asiamoth : (無題)

できました!!
「phpcache」はパーミッション707で作成していたのですが、前バージョンのmt-dynamicと差し替えたりゴチャゴチャやっているうちに、何故か動的生成できました。
お騒がせしました。
これで、本格的に3.2への移行ができます。

No.5 emirin : (無題)

こんにちは!とんちんかんな質問でしたらごめんなさい。早速改良版を使用させていただこうとインデックステンプレートmt-dpcache-load.phpを作ったのですが、再構築時にMTGETConfigのタグエラーになります。原因がよくわからないのであきらめかけてるのですが、もしかして手動でmtdbにキャッシュテーブルを作っても問題ないでしょうか?

No.6 tok : (無題)

はじめまして。Fujimotoさんのページ、大変参考になります。
この再構築を不要にするカスタマイズを導入しようとしたところ、キャッシュ用のテーブルの作成に失敗といったメッセージが出てしまいます。ホストネームとかデータベースネームとかはきちんと取得できているようですが、修正するとすれば何を修正すれば良いでしょうか。何か示唆でも教えていただければ幸いです。

No.7  : (無題)

>emirinさん
こんにちは。質問に気づくのが遅くなってすいません。

MTGetConfigでエラーが出るようであれば、mt-dpcache-load.phpおよびmt-dynamic.phpの「$dbhost」などを設定している行に、直接にホスト名などを指定してみてください。

>tokさん
こんにちは。

上のemirinさんと似たような症状になっているのかも知れません。
mt-dpcache-load.phpとmt-dynamic.phpの「$dbhost」などを設定している行に、直接にホスト名などを指定してみてください。

No.8 tok : (無題)

ホスト名変更、ためしましたがだめでした。
たぶん私の場合、Mysqlの側の問題のようです。もうすこしいろいろためしてみます。
ありがとうございました。

No.9 emirin : (無題)

まずは自分の知識不足をなんとかしなくちゃと再度PHPとMysqlの勉強をしばらくしていましたが、おっしゃるとおり、「$dbhost」などを設定している行に、直接にホスト名などを指定することで解決しました。回答ありがとうございました。

No.10 jujube Author Profile Page: (無題)

拙ブログに設置できました。ありがとうございました。

No.11  : (無題)

>jujubeさん
こんにちは。

Perl版ダイナミック・パブリッシングをご利用いただき、ありがとうございました。
また、旧版の記事を更新していなくて、ご面倒をおかけしました。

No.12 emirin : (無題)

再度の質問になります。今回はページ分割プラグインの件です。先日Perl版ダイナミック・パブリッシングのページキャッシュを導入させていただきました。なんて快適なんだろうと思ったのもつかの間、今度はページがジャンプしないことに気づきました。どのページにジャンプしてもTOPページ(1ページ)になってしまいます。ページキャッシュを止めて、通常のPerl版ダイナミック・パブリッシングに戻すとページが正常にジャンプするようです。どうもページを開いている途中で戻されているようなのですが・・・・画像を多用しているのでキャッシュ設定の問題かと考えて、最大キャッシュサイズを大きめの$max_cache_size = 200000000;
に設定してみても同じ状況です。何かしらご指摘をいただければ幸いです。よろしくお願いします。

No.13 okamOTO : (無題)

mt-dynamic.cgiを導入して快適に使っておりましたが、
数日前から

キャッシュの更新に失敗しました sql = delete from mt_dpcache where dpcache_pagefile =*****.php

のようなエラーを必ず吐くようになりました。
リロードすると正常に表示されるのですが、キャッシャされてないエントリを開くと必ず再現します。
何か対策はありますでしょうか?

No.14  : (無題)

>okamOTOさん
こんにちは。

以下を行って、キャッシュを空にしてみてください。

・phpMyAdmin等を使って、mt_dpcacheテーブルを空にする
・phpcacheディレクトリを空にする

No.15 AYano : (無題)

ダイナミックパブリッシングで今まで使っていたPerlのプラグインが使えないものかと検索して、こちらにたどり着きました。希望通りの動作をするもので、とても感激しています。ありがとうございました。

そこでひとつ質問なのですが、個別アーカイブをダイナミックページにしたところ、以前は普通に表示されていたコメント投稿フォームが表示されなくなってしまいました。どうもMTIfRegistrationRequiredにひっかかっているようなのですが、どこか設定を見直すべき点があれば教えていただけませんでしょうか。よろしくお願いします。

No.16  : (無題)

>AYanoさん
こんにちは。

そちらのBlogのURLが記入されていないので、推測になりますが・・・。

MT3.2でMT3.1x用のテンプレートをお使いになっている、ということはないでしょうか。
MT3.2ではコメント投稿関連の処理がだいぶ変わっていて、MT3.1x用のテンプレートのままだと、コメント入力フォームが表示されなかったり、サインインが正しくできなかったりすることがあるようです。

No.17 AYano : (無題)

回答ありがとうございました。
ご指摘のとおり、古いテンプレートを使い続けていましたので、最近のもので試してみます。

No.18 ミナミ : (無題)

すみません。
トラックバック自動検知: 外部のリンクに対するトラックバック自動検知を有効にする
をONにしていたらトラックバックを2重送信してしまいました
お手数かけますが、消しておいて貰えると助かります。

それと、このプラグインに関する質問をさせてください。
MT-2.0に導入しようと試行錯誤しているのですが
実際に「エントリーアーカイブ」等に適用すると500InternetErrorが表示されてしまいます。
ちなみにダイナミック・ページを有効にしなければ普通に表示される状態です。
何か解決策等ありますでしょうか。

エントリーアーカイブにダイナミック・ページを有効にしておきますので
各エントリータイトルをクリックしてみてください。

No.19 ミナミ : (無題)

2.0ではなくて
3.2-jでした orz

No.20  : (無題)

>ミナミさん
手順4の「dynamic_init.pl」ファイルが、Blogのディレクトリに出力されていないようです。
ご確認ください。

No.21 ミナミ : (無題)

返信ありがとうございます。

すみません
何故か「dynamic_init.pl.static」
になっていました… orz

生成しなおした所、今度は
キャッシュの検索に失敗しました
と言われてしまいます。
度々申し訳ありません。

No.22  : (無題)

>ミナミさん
手順3の「キャッシュ用テーブルの初期化」が正しくできていないように思われます。
もう一度手順3を行ってみてください。

No.23 ミナミ : (無題)

で…できました。

さっき2-3回繰り返した手順なのに
本当に何が悪かったんだろう。

ありがとうございました!

No.24 torokichi : (無題)

はじめまして
こちらのPerl版ダイナミック化を利用させていただき、純正のダイナミック化で悩まされていたエラーを回避することができ、快適なリビルドを体感しています。

ありがとうございます。
これからも頑張ってください。

No.25  : (無題)

>torokichiさん
こんにちは。

Perl版ダイナミックパブリッシングをご利用いただき、ありがとうございました。
自分でもこのカスタマイズはかなり重宝しています。

No.26 たいち : (無題)

はじめまして。
早速ですが、まず『MovableTypeスーパーカスタマイズテクニック』を購入しサイトのPHP化を実行し、その後すぐにこの『Perl版ダイナミック・パブリッシング』を導入しようと試みているのですが、何度試してもうまくいきません。
本に書いてあった場所から最初はzipファイルをDLしたのですが、どうもバージョンがあがっているらしい事に気付き、当方のブログ自体を削除した後にまた新規にブログを作成しPHP化をして、ver2_0.zipをDLし、今度はこちらに記述してある手順を踏んで最後までやりましたが、どうしてもうまくいかず、かなり手こずっています。
本当にさっぱり、どこが悪いのやら分からない状態です。

「Build Error」というエラータイトルのページには何かヒントが隠されているのでしょうか?

どうぞ何かヒントをください。是非、導入させていただきたいと考えています。

No.27  Author Profile Page: (無題)

>たいちさん
こんにちは。拙著をお買い求めいただき、ありがとうございます。

ご質問の件ですが、そちらのサーバーにログインしてみないと、状況がつかめそうにありません。

コメントする

管理者のみにコメントを送信したい場合は、「コメントを秘密にする」のチェックをオンにしてコメントを送信するか、メールフォームからメールをお送りください。

ブログ全体の感想など、この記事に直接に関係しないコメントは、ゲストブックにお気軽に投稿してください。


アーカイブ

ブログパーツ

ステータス