お知らせ

Movable Type プロフェッショナル・スタイル MT4.1対応 2008年4月8日

Movable Typeプロフェッショナル・スタイル」が発売されました。
Movable Typeの第一線に関わる人々の共著で、Movable Typeをビジネスサイト構築に活かすテクニックが満載です。
Movable Typeでサイト構築を行っているWeb制作会社等の方々にお勧めです。

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

再構築不要化カスタマイズ(MT3.3専用版・不具合修正&FastCGI対応)

| コメント(60) | トラックバック(2)

2008年6月6日
Movable Type 4.2をお使いの方は、4.2専用版をご利用ください。

2007年3月10日
デバッグ用のコードが一部残ったままになっていました。
2007年3月10日午前11時30分までにプラグインをダウンロードされた方は、お手数ですが再度ダウンロードいただき、「PerlDynamic.pl」を差し替えてご利用ください。

Movable Type 3.3専用版のPerl版ダイナミック・パブリッシングのプラグインをバージョンアップしました。

複数のBlogを運用する場合に不具合が出ることがありましたので、その点を修正しています。
また、Movable Type 3.34で使う場合は、再構築処理をFastCGI化して、ページの表示速度を上げることができます。

1.不具合の修正点

これまでのPerl版ダイナミック・パブリッシングには、以下のような不具合があるという指摘を受けました。

複数のBlogを運用していて、それらのBlogどうしで、ページのアドレスのドメイン名以下の部分が同じになっているページがあると、ページが正しく出力されない。

例: 2つのBlogを「http://www.foo.com」と「http://www.bar.com」のドメインで運用するようにした場合に、「http://www.foo.com/somepage.html」と「http://www.bar.com/somepage.html」のようなページがあると、ドメイン名以下の「somepage.html」が重複しているので、ページが正しく表示されない。

この点を修正しています。

2.プラグインのダウンロードと解凍

Perl版ダイナミック・パブリッシングのプラグインは、以下のアドレスからダウンロードします。

PerlDynamic_3_10.zip

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。

ファイルをダウンロードしたら、解凍しておいてください。
ただし、この時点ではまだアップロードは行いません。

3.全SQL対応版からバージョンアップする場合の準備

これまでに、全SQL対応版のPerl版ダイナミック・パブリッシングを利用していた場合、バージョンアップの前に準備の作業が必要です。

まず、MySQLまたはPostgreSQLでデータベースを管理している場合は、既存のキャッシュ用テーブルをデータベースから削除します。
手順は以下の通りです。

  • 2.の手順で解凍したものの中に、「mt-dpcache-drop.php」というファイルがありますので、そのファイルをメモ帳等で開き、内容をすべてコピーします。
  • Movable Typeにログインして、Perl版ダイナミック・パブリッシングを利用しているBlogで、インデックス・テンプレートを新規作成します。
  • インデックス・テンプレートの名前と出力ファイル名を「mt-dpcache-drop.php」にし、「テンプレートの内容」の欄に、先程コピーしておいたmt-dpcache-drop.phpの内容を貼り付けます。
  • ここまででできたインデックス・テンプレートを保存し、再構築します。
  • 再構築されたページにアクセスすると、既存のキャッシュ用テーブルが削除されます。
  • mt-dpcache-drop.phpのテンプレートを削除し、またBlogの出力先ディレクトリからもmt-dpcache-drop.phpを削除しておきます。

また、データベースの種類に関係なく、以下の作業を行います。

  • 各ブログから「dynamic_init.pl」と「mt-dpcache-load.php」のテンプレートを削除します。
  • 各ブログの出力先ディレクトリから、「mt-dynamic.cgi」「dynamic_init.pl」「mt-dpcache-load.php」のファイルを削除します。
  • Movable Typeの「plugins」ディレクトリから、「GetConfig.pl」ファイルを削除します。

4.プラグインのインストール

次に、Perl版ダイナミック・パブリッシングのプラグインをインストールします。
先程解凍したファイルの中に、「plugins」のフォルダがあります。
そのフォルダを丸ごと、Movable Typeのインストール先ディレクトリにアップロードします。

これで、Movable Typeの「plugins」ディレクトリの中に、「PerlDynamic」というディレクトリができます。
その中にある「mt-perl-dynamic.cgi」と「mt-perl-dynamic-setup.cgi」のパーミッションを「755」などに変えて、実行可能にします。

なお、Movable Type 3.3では、プラグインの日本語化対応機能があり、このプラグインではその機能を利用しています。
そのため、Movable Typeの設定をutf-8以外にしていても、ファイルをアップロードする際には文字コードを変えないでください

5.データベースの初期化

このプラグインをアップロードした後、初めてMovable Typeにログインする際には、以下のページが表示されます。
「アップグレードの開始」ボタンをクリックすると、データベースにテーブルが追加されます。

↓Movable Typeのアップグレード
Movable Typeのアップグレード

アップグレードが終わると、以下の表示になります。

↓アップグレード完了
アップグレード完了

6.FastCGI化の設定

FastCGIに対応したサーバーをお使いの場合は、Perl版ダイナミック・パブリッシングをFastCGI化することができます。

まず、サーバーにアップロードした「mt-perl-dynamic.cgi」の拡張子を、FastCGIの拡張子に変えます。
例えば、「.fcgi」の拡張子のファイルをFastCGIとして動作させるように設定している場合、「mt-perl-dynamic.cgi」を「「mt-perl-dynamic.fcgi」にリネームします。

次に、プラグインの設定で、「mt-perl-dynamic.cgi」の拡張子を指定します。
システムメニューのプラグイン一覧のページを開き、「Dynamic publishing by Perl」のプラグインの箇所で「設定を表示」のリンクをクリックします。
これで設定を行う状態になりますので、「mt-perl-dynamic.cgiの拡張子」の欄で、FastCGIの拡張子を設定します。
例えば、「.fcgi」の拡張子のファイルをFastCGIとして動作させるように設定している場合、この欄に「fcgi」と入力します。拡張子の前の「.」は入力しません。

↓mt-perl-dynamic.cgiの拡張子の設定
mt-perl-dynamic.cgiの拡張子の設定

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

次に、Movable Typeのダイナミック・パブリッシングの機能をオンにします。

ダイナミック・パブリッシングにしたいBlogで、「設定」ページの「公開」タブを開き、「公開」の部分で「テンプレート別に、スタティックHTMLもしくはダイナミック・パブリッシングを選択します」をオンにして、「変更を保存」ボタンをクリックします。

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

8.Perl版ダイナミック・パブリッシングの初期化

次に、Perl版ダイナミック・パブリッシングを初期化します。

ダイナミック・パブリッシングにしたいBlogで、「設定」ページの「プラグイン」タブを開き、プラグイン一覧の「PerlDynamic」のところで「設定を表示」をクリックします。
すると、「初期化する」というリンクが表示されますので、それをクリックします。

↓「初期化する」のリンクをクリックする
「初期化する」のリンクをクリックする

初期化が終わると、以下のようなメッセージが表示されます。

↓初期化完了時のメッセージ
初期化完了時のメッセージ

なお、初期化では以下のような処理が自動的に行われます。

  • .htaccessファイルの書き換え
  • mt-dynamic.phpテンプレートの作成と再構築
  • SQL用テンプレート(sqlsub_mysql.phpまたはsqlsub_pgsql.php)の作成と再構築

9.Perl版ダイナミック・パブリッシングの設定

次に、Perl版ダイナミック・パブリッシングを設定します。

初期化完了のページで、「このリンクをクリックして、設定を続けてください。」をクリックすると、設定ページに移動します。
また、ブログの「設定」ページの「プラグイン」タブでPerl版ダイナミック・パブリッシングの「設定を表示」をクリックし、その中の「設定を行う」のリンクをクリックしても、設定ページを開くことができます。

設定ページでは、以下の点を設定します。そして、設定が終わったら、「設定を保存」のボタンをクリックします。

・インデックスページのファイル名
メインページとアーカイブページのファイル名を指定します。
初期値は「index.html」ですが、BlogをPHP化している方は「index.php」に変えてください。

・ページが見つからないときの移動先のURL
間違ったアドレスのページに接続されたときには、エラーページに転送することができます。
その機能を使いたい場合は、この欄にエラーページのURLを入力します。
なお、この欄を空欄にした場合、間違ったアドレスに接続されたときには、「ご指定のアドレスのページは見つかりませんでした。」というメッセージが表示されます。

・キャッシュの設定
Movable TypeのデータをMySQLかPostgreSQLに保存している場合、ページのキャッシュ機能を使うことができます。
キャッシュ機能を使いたい場合は、「キャッシュを使う」のチェックをオンにします。
また、キャッシュをオンにする場合、「キャッシュの容量」の欄で容量も指定することができます。

↓Perl版ダイナミック・パブリッシングの設定
Perl版ダイナミック・パブリッシングの設定

10.ダイナミック・パブリッシングにするテンプレートを選ぶ

次に、インデックス・テンプレートとアーカイブ・テンプレートの中で、ダイナミック・パブリッシングにしたいものを選びます。
対象のテンプレートを開き、ページ右上の方にある「このテンプレートをダイナミック・ページにする」のチェックをオンにして、テンプレートを保存します。

↓このテンプレートをダイナミック・ページにする」のチェックをオンにする
Perl版ダイナミック・パブリッシングの設定

11.Blog全体を再構築する

ダイナミック・パブリッシングにするテンプレートを選び終わったら、Blog全体を再構築します。
これ以後は、各ページがダイナミック・パブリッシングで出力されます。

なお、再構築後にBlogの出力先ディレクトリを見ると、「~.static」という名前のファイルができています。これらのファイルは、これまでの静的再構築で作られていたファイルです。
これらのファイルは不要になりますので、サーバーから削除することができます。

12.小粋空間のテンプレートをお使いの場合

小粋空間のテンプレートをお使いの場合、メインページや各アーカイブ・ページのテンプレートの先頭に、以下のXML宣言が入っています。

<?xml version="1.0" encoding="<$MTPublishCharset$>"?>

Perl版ダイナミック・パブリッシングを利用すると、ダイナミック・パブリッシング化したページは、すべてPHPで処理されます。
一般的なPHPの設定では、「<?」と「?>」で囲まれた部分はPHPのスクリプトとして認識されます。
上記のXML宣言も「<?」と「?>」で囲まれているため、PHPのスクリプトと認識されてしまい、このままだと以下のようなエラーが表示されます。

Parse error: syntax error, unexpected T_STRING in /○○○/index.php on line 1

そこで、この行を以下のように書き換えて、XML宣言をPHPのスクリプトで出力するようにします。

<?php print('<?xml version="1.0" encoding="<$MTPublishCharset$>"?>' . "\n"); ?>

はてなブックマークの情報

トラックバック(2)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/836.

このブログでは多数の MT プラグインを使用させていただいているが中でも The blog of H.Fujimoto の藤本壱さん Ogawa::Mem... 続きを読む

はじめにでも少し述べましたが、当ブログではサイトマップ以外のページはダイナミック・バブリッシング(動的生成)によりページを表示させております。このダイナミ... 続きを読む

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

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

No.1 TK : (無題)

壱さんこんにちは。
早速新しいプラグインインストールさせて頂きました。

インデックスページでは正常にパブリッシング出来ております。
ただ、アーカイブページ(エントリー・カテゴリ)では「Build Error」となってしまいます。

これは何か設定がおかしいのでしょうか?

No.2 TK : (無題)

連投すみません。

エントリー・カテゴリページでもパブリッシング出来ました。

一部のエントリーページでは相変わらずBuild Errorになっていたので色々調べてみたところ、「出力ファイル名が同じエントリーが以前存在していた」ものだけがErrorになっていました。

そこでMySQLの「mt_fileinfo」を空にしてみると正常にパブリッシング出来ました。

取り急ぎ報告させて頂きます。

No.3  Author Profile Page: (無題)

>TKさん
こんにちは。
動作報告ありがとうございました。

No.4 footbrain : (無題)

キャッシュを使うと、エントリー表示の際に、
「キャッシュの検索に失敗しました sql = select * from mt_dpcache where dpcache_uri =」と表示されます。

キャッシュを使わなければ問題なく画面は表示されます。

どこに問題があるのでしょうか?

No.5  Author Profile Page: (無題)

>footbrainさん
こんにちは。

「キャッシュの検索に失敗しました sql = select * from mt_dpcache where dpcache_uri =」でメッセージが切れているとすると、mt-dynamic.phpが正しく出力されていないのではないかと思われます。
インデックス・テンプレートの中に「mt-dynamic.php」のテンプレートがありますが、プラグインの「tmpl」フォルダにある「mt-dynamic.tmpl」の内容をそのテンプレートに貼り付けて、再構築しなおしてみてください。
これでも動作しないようだと、そちらの環境でデバッグしてみないと原因は分かりません。

No.6 footbrain : (無題)

>壱さん

v3.01からのアップデートだったにもかかわらず、
「3.全SQL対応版からバージョンアップする場合の準備」を行ってしまったのが原因だと思われます。

…以前にも同じような事をしでかした記憶がありますが、デジャヴ?

毎度ながら、お騒がせしました。ごめんなさい。

ところで、無事v3.10にアップデートした後のログに、
"last_clear = 2007********blog_children = 2007********
などという記録が残っていました。

Perl版ダイナミック・パブリッシングで構築したテンプレートを表示すると、その度にこの記録が追加されます。

デバッグライトのようにも思えるのですが、お心当たりはありませんか?

No.7  Author Profile Page: (無題)

>footbrainさん
こんにちは。

ログの件をご指摘いただき、ありがとうございました。
修正したものをアップロードしておきましたので、解凍して「PerlDynamic.pl」を差し替えてご利用ください。

No.8 Sumika : (無題)

>footbrainさん
全く同じ状態で、v3.01からのアップデートだったにもかかわらず、「3.全SQL対応版からバージョンアップする場合の準備」を行ってしまった為にキャッシュ機能が使えなくなってしまいました。
申し訳ないのですが修正手順を教えて頂けませんでしょうか?

No.9 footbrain : (無題)

>壱さん
対応ありがとうございます。

ところで、その差替え分はどこにアップされていますか?
PerlDynamic_3_10.zipを解凍して中身を拝見してもも、
以前と代わりがないようなのですが…

>Sumikaさん

壱さんのところで、僕が修正手順をお教えするなんておこがましい事ですが、
お困りのようなので…

ただ、あくまでも僕が行ってたまたま上手くできた事なので、
保証はできませんから悪しからず。

1.あらかじめバックアップしておいたデータベースで、データベースを復元。

2.PerlDynamicプラグインv3.10を削除、v3.01をインストールし、
 v3.10をインストールする以前の環境で稼働する状態にする。

3.v3.01のフォルダ(plugins/PerlDynamic)内にあるものを全てv3.10に入れ替える。

ここからは、このページにある手順7以降を行えば上手くいくはずです。

>壱さん
※過不足がありましたら、フォローお願いします。

No.10  Author Profile Page: (無題)

>footbrainさん
こんにちは。
アップロードしたファイルの拡張子が「zip」ではなく「ZIP」になっていました。申し訳ありません。
修正しておきましたので、お手数ですが再度ダウンロードしてください。

>Sumikaさん
こんにちは。
phpMyAdmin等のデータベース管理ツールがあれば、以下のような手順で復旧することができます。

1.mt_configテーブルを開きます。
2.「config_data」フィールドの中に、以下のような値が含まれるレコードを探します。

PluginSchemaVersion PerlDynamic/PerlDynamic.pl=3

3.見つかったレコードの「config_data」フィールドから、「PluginSchemaVersion PerlDynamic/PerlDynamic.pl=3」の記述を削除して保存します。
4.Movable Typeにログインします。
5.エントリーの「5.データベースの初期化」の状態になりますので、あとはエントリーの通りに作業します。

No.11 Sumika : (無題)

>footbrainさん
>壱さん

丁寧なご説明有難う御座います。手順通りに修正してみたところ、無事にキャッシュ機能が使えるようになりました。多謝。

No.12 sawada : (無題)

初めてご連絡いたします。大変勉強になります。
PerlDynamicを導入したのですがうまくいかず、失礼を承知でご連絡させて頂きました。

>解凍したファイルの中に、「plugins」のフォルダがあります。
そのフォルダを丸ごと、Movable Typeのインストール先ディレクトリにアップロードします。
これで、Movable Typeの「plugins」ディレクトリの中に、「PerlDynamic」というディレクトリができます。

とありますが、ダウンロードしたファイルを解凍すると、
PerlDynamic_3_10フォルダ以下に、
pluginsフォルダ
mt-dpcache-drop.php
があります。
pluginsフォルダ
以下には、「lib」「tmpl」のフォルダとmt-perl-dynamic.cgi
、mt-perl-dynamic-setup.cgi、PerlDynamic.plがあり、libフォルダ以下には、PerlDynamicフォルダやPerlDynamic.pmがあります。

このpluginsフォルダをアップロードするということでしょうか。
そうすると、PerlDynamicというディレクトリは、「lib」以下に入ります。
手順について、お助け頂ければ幸いです。

No.13  Author Profile Page: (無題)

>sawadaさん
こんにちは。

Zipファイルの作成にミスがあり、申し訳ありませんでした。
修正したものをアップロードしておきましたので、再度ダウンロードしてください。

No.17 sawada : (無題)

>壱さん
修正分のアップロードありがとうございました。設置もうまくできまして嬉しいかぎりです。
ところで、一部のエントリーで「キャッシュファイルのコピーに失敗しました」とエラーになりますが、このエントリーは何度リロードしても同様になります。
特定のエントリーにこのエラーが出る場合に考えられる原因をいくつか教えて頂ければ幸いです。
phpcache、phptempとも属性は707で、試しにエントリーの内容をまったく同じにしても、「キャッシュファイルのコピーに失敗しました」となるエントリーとならないエントリーがあります。

No.18  Author Profile Page: (無題)

>sawadaさん
こんにちは。

何らかの原因で、特定のエントリーを再構築する際に、mt-perl-dynamic.cgiが500エラーを起こしているのではないかと思われます。
ただ、そこから先の原因を解明するには、そちらのサーバーにログインして動作を追ってみないと分からないです。

No.14 ひかる : (無題)

はじめまして。
素晴らしいプラグインを開発していただきありがとうございます。

この度、MT3.33+ロリポップ+MySQLの状態で再構築不要化カスタマイズ(MT3.3専用版)の新規インストールを行ったのですが、

キャッシュファイルのコピーに失敗しました

というエラーが表示され、
キャッシュの設定でキャッシュを無効にすると
下記の様なエラーが表示されてしまいました。

Warning: main(): Failed opening '' for inclusion (include_path='.:/usr/local/lib/php:/usr/local/lib/php/Smarty') in /home/sites/lolipop.jp/users/●●●/web/mt-dynamic.php on line 181

この場合どのような原因が考えられるのでしょうか?
唐突な質問で申し訳ございませんが、
お助け頂けましたら幸いです。

No.15  Author Profile Page: (無題)

>ひかるさん
こんにちは。

今の状況だと、mt-perl-dynamic.cgiが動作していないものと思われます。
「http://MTのURL/plugins/PerlDynamic/mt-perl-dynamic.cgi」のアドレスにアクセスしてみて、mt-perl-dynamic.cgiが起動できるかどうかを調べてみてください。

No.16 ひかる : (無題)

壱さんお返事ありがとうございます。
mt-perl-dynamic.cgiにアクセスしてみたところ
/home/sites/lolipop.jp/users/●●●/web/phptemp/0004058338.php

というようなテキストを出力していました。

正常に動作している別サーバーのものと同じ動作ですので、恐らくこれが正常な動作ですよね。

いろいろいじってみた結果、.htaccessにベーシック認証がらみの記述が混じっていたのが原因だったようです。
ベーシック認証を解除後、正常に動作するようになりました。

大変お騒がせし、申し訳ございませんでした。
これからもどうぞよろしくお願いいたします。

No.19 琉羅 Author Profile Page: (無題)

>壱さん
こんにちは。
ブログ公開当時よりページ分割プラグインと共に利用させていただいており、問題なく動作しておりますのでご報告させていただきます。

今回エントリーにしてみましたのでTBを送信させていただきました。
既存のプラグインも問題なく動作し、再構築不要でストレスフリー。
とても気に入っております。

No.20  Author Profile Page: (無題)

>琉羅さん
こんにちは。
プラグインご利用ありがとうございました。

No.21 kunie : (無題)

インストールして再構築を行った所、index.htmlが出力されずにページが404状態になる様になってしまいました。代わりに(?)index.xmlが作成されていました。

No.22  Author Profile Page: (無題)

>kunieさん
こんにちは。

今の状況からすると、Blogのディレクトリに.htaccessファイルができていないものと思われます。
本文の手順の8番を行ってみてください。

なお、ダイナミック・パブリッシング化したページは、静的なファイルは出力されなくなります。
index.htmlをダイナミック・パブリッシング化したのであれば、index.htmlが出力されないのは正しい動作です。

No.23 footbrain : (無題)

こんにちは。

 RightFields バージョン 1.13を導入しようと試みているのですが、Perl版ダイナミック・パブリッシングで構築している個別Entryを表示しようとすると、「キャッシュファイルのコピーに失敗しました」と表示されます。

 また、"設定: Dynamic publishing by Perl"で初期化を行おうとすると「Script Error」になります。

RightFieldsとの併用はできないのでしょうか?
何か手順を間違えているのでしょうか?

教えてください。お願いします。

No.24  Author Profile Page: (無題)

>footbrainさん
こんにちは。

こちらで試した限りでは、RightFields 1.13と併用できています。

なお、「Script Error」の表示からすると、初期化を行おうとした際に、HTTPヘッダーの前に何らかの警告メッセージが出力されているのではないかと思います。
試しに、mt-perl-dynamic-setup.cgiと、mt-perl-dynamic.cgiの先頭の行を、以下のように変えて、警告メッセージを出力しないようにしてみてください。

変更前:
#!/usr/bin/perl -w

変更後:
#!/usr/bin/perl

No.25 footbrain : (無題)

>壱さん
ありがとうございます。

 あれこれと弄り回していたら、mt.cgiでも「Script Error」が起きるようになってしまったので、環境を最初から作り直してみましたところ、

RightFields 1.13と併用できました。

 また、mt-rebuild-preview.cgiで、RightFieldsを使えるようになった後に「Script Error」が起きていたのですが、#!/usr/bin/perlと書き換えてインストールし直したところ、なぜかエラーはなくなり、現在は問題なく動作しています。

No.26 ゆう Author Profile Page: (無題)

こんにちは。

いつも使わせていただいています。ゆうと申します。

3.10 FastCGI の対応を知りバージョンアップしましたが、FastCGI 上での動作の際に不具合が生じてしまいました。

カテゴリベース・日付ベースのページのみの症状ですが httpd 起動後一番はじめに表示した物をキャッシュし続け、別のカテゴリ・別日付を表示しても一番はじめのものが表示されてしまう症状が出ています。

今回修正の別ブログの場合で修正かと思いましたが、ちがうようでして、私の場合、同一ブログID内ので一番はじめに表示した物が表示されてしまっています。

分かりますでしょうか?

No.27  Author Profile Page: (無題)

>ゆうさん
こんにちは。

ご質問の件ですが、mt-perl-dynamic.cgiに渡されるパラメータが更新されていないのではないかと思われます。
もっとも、こちらではそのような現象が再現できないため、申し訳ありませんが原因ははっきりとは分かりません。

No.28 footbrain : (無題)

RightFields 1.13との併用の件ですが、

MTを3.5にアップデートした際に、Jcode.pmのバージョンが3.5にバンドルされているバージョンに落ちてしまっていた事が原因だったようです。

トラブっていたときと全く同じ環境にする事ができなかったので、あくまでも現状でのデバッグですが、現在は「-w」をつけたオリジナル・ソースのままで問題なく動いています。

No.29 footbrain : (無題)

…と思いきや、今度は
Warning: include() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/local/lib/php') in ....../mt-dynamic.php on line 181
と表示されるようになりました。

No.31  Author Profile Page: (無題)

>footbrainさん
こんにちは。

このプラグインが正しく動作していれば、mt-perl-dynamic.cgiは再構築結果のファイル名を返し、mt-dynamic.phpがそのファイルを読み込んで表示する、という動作になります。
動作の状況からすると、mt-perl-dynamic.cgiが正しく動作していないものと思われます。

ただ、何が原因で正しく動作していないかは、今のエラーメッセージからだと分かりません。
「http://○○○.com/mt/plugins/PerlDynamic/mt-perl-dynamic.cgi?uri=表示したいページのURL」にアクセスしてみて、どのようなメッセージが表示されるかを確認してみてください。

No.33 footbrain : (無題)

>壱さん
お世話になります。

試してみましたが、スクリプトエラーでした。

内容は、下記の通りです。

argv[0] = 'cgiwrapd'
Executing '...../mt-perl-dynamic.cgi'
Output of script follows:
=====================================================
Subroutine edit_object redefined at ../../lib/MT/App/CMS.pm line 1991, line 855.
Status: 200
Pragma: no-cache
Content-Type: text/plain; charset=utf-8

No.34  Author Profile Page: (無題)

>footbrainさん
こんにちは。

「Subroutine XXX redifined」は、同じ名前のサブルーチンが2回定義されているというエラーです。
このことからすると、CMS.pmが、本来のディレクトリ(MT_DIR/lib/MT/App)だけでなく、どこかの別のディレクトリに混入しているのではないかと推測します。

ちなみに、このプラグインには、CMS.pmを直接に呼び出すところはありません。

No.36 footbrain : (無題)

>壱さん
こんにちは。

CMS.pmは、何度調べても本来のディレクトリ(MT_DIR/lib/MT/App)にしかありませんでした。

不思議です。

No.30 上町 : (無題)

.htaccessでのBasic認証と併用する方法はないでしょうか?
16のひかるさんと同じくBasic認証があるとエラーになり
ダイナミックパブリッシングで使用している.htaccessにはBasic認証の指定をせず
ひとつ上の階層などに設置してもやはりエラーになってしまいます。
とても便利なプラグインでぜひ使用していきたいと思っておりますので
解決策がございましたらご教示いただければ幸いです。

No.32  Author Profile Page: (無題)

>上町さん
こんにちは。

こちらでXREAのサーバーでテストした限りでは、.htaccessでBasic認証を行うようにしても、特に問題なく動作しました。
サーバーの設定に依存する問題ではないかと思われますので、そちらの環境で動作を追ってみないと、解決は難しいです。

No.35 上町 : (無題)

>壱さま
お手数をおかけいたしまして申し訳ありません。
サーバの方で.htaccessに何か独自の設定があるということでしょうか?
もう少し調べてみます。ありがとうございました!

No.37 たぐたぐ : (無題)

こんにちは、さっそく素敵なプラグインを利用させていただいています。

私はカテゴリページにページ分割で・・・
{{capture assign="count"}}{{/capture}}
{{if $smarty.request.offset > 0}}
« 前の10件
| 最新の10件
{{/if}}
{{if $smarty.request.offset {{if $smarty.request.offset > 0}}
|
{{/if}}
次の10件 »
{{/if}}
・・・を利用しています。

このプラグインを導入すると・・・
{{capture assign="count"}}67{{/capture}} {{if $smarty.request.offset > 0}} ≪ 前の10件 | 最新の10件 {{/if}} {{if $smarty.request.offset 0}} | {{/if}} 次の10件 ≫ {{/if}}
・・・と画面上にタグが出て、「次の10件」も機能しなくなっています。
これはバグでしょうか?

No.38 たぐたぐ : (無題)

こんにちは、導入させていただいています。

「ページが見つからないときの移動先のURL:」でURLを設定しているのですが、ページエラーは常に「キャッシュファイルのコピーに失敗しました」になってしまいます。
キャッシュファイルコピーのエラーはnot foundのエラーとは違うのでしょうか。

また、キャッシュの容量を最大値と思われる99999999にしているのですが、常にキャッシュファイルのコピーに失敗しましたとなり、キャッシュが形成されていないようです。
キャッシュが形成されているかどうかの確認はどこでおこなえばよろしいでしょうか?

ご教授くださいませ。

No.39  Author Profile Page: (無題)

>たぐたぐさん
こんにちは。

2件のコメントをいただいていますが、お書きになっていることからすると、MT標準(PHP版)のダイナミック・パブリッシングと、Perl版ダイナミック・パブリッシングがごちゃ混ぜになっているようにお見受けします。

{{capture}}などの記述は、「Smarty」というテンプレート・エンジンの記法で、MT標準(PHP版)のダイナミック・パブリッシングに採用されているものです。
Perl版のダイナミック・パブリッシングはSmartyは使いませんので、{{capture}}等の書き方を行うことはできません。
ページ分割をなさりたいのであれば、拙作のPerl版ダイナミック・パブリッシング専用のページ分割プラグインをご利用ください。

http://www.h-fj.com/blog/archives/2005/07/08-130132.php

また、Perl版ダイナミック・パブリッシングのキャッシュは、Blogの出力先ディレクトリの中の「phpcache」ディレクトリに保存されます。

No.40 しろねこ : (無題)

こんにちは、3ヶ月前から利用させていただき、快適なプラグインとしてとても重宝させていただいてます。

さて・・・・
・MT3.34
・さくらインターネット
・MySQL

・・・の条件下でこれまで快適に動作していました。
ところが急にすべてのページが「再構築したファイルを保存するのに失敗しました。」で見れなくなりました。

google検索て原因の可能性がある・・・
http://abeke.ciao.jp/diary/2007/02/
・・・より、mt-dynamic.php、phpcache、phptempはちゃんと保存されていることが判明しました。
再構築をしても同じ症状です。

google検索などで調べてもお手上げですので、原因をお教えいただければと思います。
お手数ですが検索結果もわからない状態ですのでどうぞよろしくお願いいたします。

No.41  Author Profile Page: (無題)

>しろねこさん
こんにちは。

そのエラーが出るのは、phptempディレクトリにファイルを書き込むことができなかった場合です。
Blogの出力先ディレクトリの中にphptempディレクトリがあるかどうか、またディレクトリがあるならパーミッションが正しいかどうかを確認してみてください。

No.42 しろねこ : (無題)

>壱さま
ご丁寧なレスありがとうございました。
phptempがあること、パーミッションが正しいこと、の両方を確認いたしました。
それでも解決しないのでいくつか調べてみると、サーバ容量がオーバーしていていることが原因と判明しました。
phptempの中のキャッシュが異常に増えたことが原因でした。

この点、これまでのコメントを派遣してキャッシュを手動で削除&パーミッションを757に変えてみると正常に戻りました。
解決いたしました、どうもありがとうございました。

ただ、この方法だと・・・
「厳密には、Blog内のどこかのページにアクセスすると、phptempディレクトリのファイルの中で、アクセスの時刻から1分以上前に作られたファイルが削除されます。」
・・・とおっしゃっております。
サイト閲覧を軽くするため、できればキャッシュは時間ではなく、設定した容量(私の場合は1G)に達するまでは削除せずに残したいと思っております。
この方式でそのことは可能でしょうか?
たびたび申し訳ありません。

No.43  Author Profile Page: (無題)

>しろねこさん
こんにちは。

phptempディレクトリはキャッシュ用のディレクトリではありません。
キャッシュのファイルはphpcacheディレクトリに保存するようになっています。こちらは、本文の手順9の通り、キャッシュのサイズを指定することができます。

ただし、データベースとしてSQLiteを使っている場合は、キャッシュ機能は使えません。

No.44 しろねこ : (無題)

>壱さま
たびたびありがとうございます。
phpcacheとphptempを勘違いしておりました、お恥ずかしい限りです。
お手数をわずわらしてしまって申し訳ありませんでした。
とても快適に使わせていただいていますので、重ねてこの場を借りてお礼申し上げます。

No.46 ひらい : (無題)

はじめまして。いつも便利に使わせていただいております。

30番の上町さまと同じように、ベーシック認証と併用したいと思っております。XREAのサーバで、ダイナミックパブリッシングのディレクトリにある.htaccessにベーシック認証関連の記述を追加したり、一つ上のディレクトリに.htaccessを置いたりしているのですが、エントリーを閲覧する際に「キャッシュファイルの生成に失敗」などのエラーが出てしまいます。
XREAのサーバーでBasic認証を行っても特に問題なく動作するとのことですが、どのような設定・ディレクトリ構成で行っているのかご教授いただけませんでしょうか?
よろしくお願いいたします。

No.47  Author Profile Page: (無題)

>ひらいさん
こちらで試した状況は、以下のようなものです。

・MTのインストール先ディレクトリ
/virtual/アカウント名/public_html/mt
・ブログの出力先ディレクトリ
/virtual/アカウント名/public_html/blog
・ブログのURL
http://アカウント名.サーバー名.xrea.com/blog/
・.htaccessの内容
AuthUserFile /virtual/アカウント名/public_html/blog/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user

## %%%%%%% Movable Type generated this part; don't remove this line! %%%%%%%
# Disable fancy indexes, so mtview.php gets a chance...
Options -Indexes +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
# The mod_rewrite solution is the preferred way to invoke
# dynamic pages, because of its flexibility.

# Add mtview.php to the list of DirectoryIndex options, listing it last,
# so it is invoked only if the common choices aren't present...
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.htm default.htm default.html default.asp /blog/mt-dynamic.php
</IfModule>

RewriteEngine on

# don't serve mtview.php if the request is for a real directory
# (allows the DirectoryIndex lookup to function)
RewriteCond %{REQUEST_FILENAME} !-d

# don't serve mtview.php if the request is for a real file
# (allows the actual file to be served)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !\.(cgi|css|gif|jp*g|png)$
# anything else is handed to mtview.php for resolution
RewriteRule ^(.*)$ /blog/mt-dynamic.php [L,QSA]
</IfModule>

<IfModule !mod_rewrite.c>
# if mod_rewrite is unavailable, we forward any missing page
# or unresolved directory index requests to mtview
# if mtview.php can resolve the request, it returns a 200
# result code which prevents any 4xx error code from going
# to the server's access logs. However, an error will be
# reported in the error log file. If this is your only choice,
# and you want to suppress these messages, adding a "LogLevel crit"
# directive within your VirtualHost or root configuration for
# Apache will turn them off.
ErrorDocument 404 /blog/mt-dynamic.php
ErrorDocument 403 /blog/mt-dynamic.php
</IfModule>
## ******* Movable Type generated this part; don't remove this line! *******

No.48 MT初心者 : (無題)

こんにちは。
いつもお世話になっております。

今回インストール作業中に手間取ってしまった箇所がございましたので、情報共有のために報告させてください。

以前、lolipopサーバーでは出なかったのですが、今回別のサーバーで作業を行っていた際に、「kunie | 2007年04月16日 11:25」さんが記述されたときと同じ症状が発生しました。

原因を調べましたところ、「.htaccess」ファイルは生成されていたのですが、その中身が空だったことに因るものでした。
おそらくパーミッションの関係でプラグイン側からは、ファイルの中身まで生成することができなかったからかと思います。

そこで、以前lolipopでインストールさせていただいた際に生成されていた「.htaccess」ファイルの中身を書き換えてアップロードすることで、無事動作いたしました。

書き換えた箇所は以下のとおりです。
(それぞれmt-dynamic.phpのファイルまでのルートからのパスです)

12行目
DirectoryIndex index.php index.html index.htm default.htm default.html default.asp /xxx/mt-dynamic.php

26行目
RewriteRule ^(.*)$ /xxx/mt-dynamic.php [L,QSA]

39行目
ErrorDocument 404 /xxx/mt-dynamic.php
40行目
ErrorDocument 403 /xxx/mt-dynamic.php

「/xxx/」の部分を今回インストールしたサーバーのものに書き換えましたら、正常に動作いたしました。

以上となります。

No.49  Author Profile Page: (無題)

>MT初心者さん
こんにちは。情報ありがとうございます。

ちなみに、このプラグインでは、MTが出力した.htaccessを一部置換するという処理を行っています。
そのため、MTが.htaccessの出力に失敗すると、.htaccessが作られないことになってしまいます。

No.50 hiro : (無題)

こんにちは。
便利なプラグインを提供していただきありがとうございます。
とても重宝しています。

キャッシュがどうしてもうまく動作してくれないので質問させてください。

インストールは完了して、ダイナミックに指定したページもうまく生成されているのですが、キャッシュを使う設定にすると、
「キャッシュの検索に失敗しました sql = select * from mt_dpcache where dpcache_uri = '....' and dpcache_blog_id = 1」というエラーが出ます。

footbrainさんのNo.6の記事と同様、v3.01からのアップデートだったにもかかわらず、「3.全SQL対応版からバージョンアップする場合の準備」を行ってしまったのが原因だと思い、No.9のv3.01に戻してから再度アップデートする方法を試してみようと思いましたが、v3.01がダウンロードできず、試せていません。

No.10の方法は、
「2.「config_data」フィールドの中に、以下のような値が含まれるレコードを探します。」
というところでフィールドの中のレコードを探す方法がわからずつまずいています。

どうしてもキャッシュを利用したいので、何か解決方法があればご教授願います。よろしくお願いします。

No.51  Author Profile Page: (無題)

>hiroさん
こんにちは。
以下の手順で操作してください。

1.phpMyAdminで、Movable Typeのデータベースを操作する状態にします。
2.ウィンドウ左端のテーブル一覧で「mt_config」をクリックします。
3.ウィンドウ右半分にmt_configテーブルの情報が表示されますので、左上の方にある「表示」をクリックします。
4.mt_configテーブルのレコードの一覧(ただしレコードは1つだけ)が表示されます。
5.レコード一覧の部分で、鉛筆の形のアイコンをクリックします。
6.レコードを編集する状態になりますので、「config_data」フィールドの値の中で、以下のような部分を探して、その部分を切り取ります(最後の「x.xx」は環境によって異なります)。

PluginSchemaVersion PerlDynamic/PerlDynamic.pl=x.xx

7.「実行する」ボタンをクリックして、レコードを保存します。
8.phpMyAdminのメニューに戻り、「mt_dpcache」テーブルを削除します。
9.Movable Typeにログインします。
10.データベースのアップグレードのメッセージが表示されますので、画面の指示に従います。

No.52 hiro : (無題)

上記の方法でうまく動作するようになりました。
ありがとうございました!

No.53 shin : インストールする前の状態に戻す方法

はじめまして、こんにちは。
便利なプラグインを提供していただきありがとうございます。
いつも利用させていただいております。

Perl版ダイナミックパブリッシングをインストールする前の状態に戻す方法について質問させてください。

インストール完了したのですが、都合によりPerl版ダイナミックパブリッシングを利用しないことになりました。インストールする前の状態に戻す方法が見つからず、インストール手順をそのまま逆の手順で作業を進めてみました。

(1)Pluginフォルダにアップロードしたファイルの削除
(2)インストール時に作成されたファイルの削除
(3)データベースにてmt_configテーブルのconfig_dataフィールドの不要と思われる部分の削除

この3つの作業を実行し、ログインしなおしました。
これ以外にするべき作業や、間違った部分がありましたら、ぜひご教授お願いします。

No.54  Author Profile Page: Re:インストールする前の状態に戻す方法

こんにちは。

お書きになった手順のほかに、データベースにある「mt_dpcache」というテーブルを削除しておいてください。

No.55 shin : (無題)

元の状態に戻ったようです。
どうもありがとうございました。

No.56 たく : Build Error

初めまして
Build Errorが出て困っています
教えてください

最初3.0を使っていて3.1に上げるときに「全SQL対応版からバージョンアップする場合の準備」をやってしまいました
コメントの6番で同じ症状がありましたので、対処法の通りデータベースからconfig_dataの該当部分を削除、キャッシュテーブルも削除して、やり直しをしました
そしてプラグインの設定に進み、全てを再構築したところ、Build Errorが出てしまいました
phpcacheの中にキャッシュは作られているようです
phptempは空です
パーミッションは707や777にしてみました
前は777にして動いていました
テンプレートは二つとも作られています
.htaccessは作られなかったので、ダウンロードしておいたものをアップしました
昨日から何度も色んな方法でやり直しをしてみていますが、元に戻りません
どうかよろしくお願いいたします

No.57  Author Profile Page: Re:Build Error

>たくさん

こんにちは。

症状からすると、テンプレートの再構築の際に何かエラーが起こっているようです。
ためしに、表示できないページをスタティックに再構築してみて、エラーが出るかどうかを調べてみてください。

それから、ダイナミック・パブリッシングをオンにした状態で、以下のことも試してみてください。

1.データベースのmt_fileinfoテーブルの内容を空にします。
2.ブログ全体を再構築します。

No.58 たく : (無題)

ありがとうございます
>スタティックに再構築してみて・・・
というところで思い当たることがありました
やってみたときにエラーが出ていたのを見過ごしていました
エラーをもう一度見ると色んなプラグインの名前が入っていました
その中の一つのプラグインを一旦削除したのですが、その中に必要なものをバックアップしてなくて、不足したままアップロードしていました
ちょうど一緒に行ったので原因が分からなくなっていました
本当にありがとうございました。4日くらい悩んでいたので助かりましたダブルハート

No.60 sasa : サイトがダウンしてしまいます

いつも便利にプラグインを使わせていただいております。

数日前、こちらにコメントしたつもりが、表示されていないようで、かつ問題が再現したので、改めてコメントさせていただきます。

昨日、サーバに数時間全くアクセスがとれなくなってしまいました。
そこで、サーバの管理者に問い合わせしたところ、以下のような返答がきました。

(引用ここから)
php のエラーログを見たのですが、お尻の方だけですが
以下のような状況です。

[18-Mar-2009 22:04:40] PHP Warning: main() [ href='function.include'>function.include]: Failed opening '' for
inclusion (include_path='.:/usr/share/pear') in
/var/www/html/mt-dynamic.php on line 181



上記のエラーログが無数にあり、

やはり高負荷の時に mt-dynamic.php が悪さをしているのではないでしょうか?

プロセスの状況を見ても同様です。
72 root 16 0 0 0 0 D 2.2 0.0 46:17.50 kswapd0
27511 apache 18 0 31468 22m 2460 S 1.5 1.1 0:00.62
mt-perl-dynamic
27306 apache 18 0 30356 20m 2460 S 1.5 1.0 0:00.63
mt-perl-dynamic


異常な数の mt-perl-dynamic が立ち上がっています。
細かく見ると
apache 27633 24838 0 22:07 ? 00:00:00 /usr/bin/perl -w
/var/www/html/mt/plugins/PerlDynamic/mt-perl-dynamic.cgi
となっていますね。

とりあえず apache を再起動しました。暴走は止まったようですが。

考えられることとしては、mt-perl-dynamic.cgi もしくは mt-dynamic.php が
無限ループ(自分自身を呼び出すなど)に入っている、もしくは何か重要な
ファイルを読み込めず、その際のエラー処理がされないために、終了しないで
生き続ける、といったことがあります。
確実に言えることは mt-dynamic.php で、名無しのファイル '' を読み込もうとして
失敗しているので、これが何らか関係している可能性がかなり高いです。
(引用ここまで)

普段は、問題なく動作しているだけに、原因がmt-dynamic.phpにあるのか、断言できないのですが、何か心当たりがございましたら、ご教授いただけると助かります。

よろしくお願いします。

No.61  Author Profile Page: Re:サイトがダウンしてしまいます

>sasaさん
こんにちは。

試しに、mt-dynamic.phpのテンプレートで、89行目を以下のように書き換えてみてください。

・書き換え前
if ($filename == 'Save page error') {
・書き換え後
if ($filename == 'Save page error' || trim($filename) == '') {

なお、MT3.3用のプラグインはもう作っていませんので、申し訳ありませんが、今後改良する予定はありません。

No.62 sasa : (無題)

壱さま

お忙しいところ、コメントありがとうございました。

いただいた内容を試してみます。

>なお、MT3.3用のプラグインはもう作っていませんので、申し訳ありませんが、今後改良する予定はありません。

そうですよね。
にも関わらず、コメントいただきありがとうございました!

コメントする


Movable Type Developer's Guide Volume 1

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」を発売しました。
詳細は特設ページをご覧ください。