お知らせ

PHPによるWordPressカスタマイズブック2009年9月8日

PHPによるWordPressカスタマイズブック」が発売されました。
WordPressのテンプレートにPHPのプログラムを書いてカスタマイズする方法や、WordPressのデータベースにPHPでアクセスする方法、またWordPressのプラグインの開発方法など、WordPressをより深く活用したい方に最適な一冊です。

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

Perl版ダイナミック・パブリッシング(MT4.2用)

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

「Perl版ダイナミック・パブリッシング」は、テンプレートの再構築を動的に行うことができるプラグインです。
読者がページにアクセスした時点でページを再構築する動作をします。
Movable Type本体のダイナミック・パブリッシングとは異なり、既存のプラグインをほとんど利用できるメリットがあります。
さらに、データベースとしてMySQLかPostgreSQLを使っている場合、ページをキャッシュして、動的再構築による負荷の増加を抑えることもできます。

このプラグインのMovable Type 4.2版を公開します。
Movable Type 4.2RC1+MySQLの環境で動作を確認しました。

なお、このバージョンはMovable Type 4.2専用です。
旧版のMovable Typeをお使いの方は、以下のバージョンをご利用ください。

Movable Type 3.3用
Movable Type 4.0/4.1用

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

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

PerlDynamic_3_23.zip

また、「RebuildHelper」というプラグインも別途必要です。
そのプラグインは以下のアドレスからダウンロードします。

RebuildHelper_1_02.zip

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

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

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

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

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

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

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

  • 1.の手順で解凍したものの中に、「PerlDynamic」というフォルダがあり、その中に「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」ファイルを削除します。

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

次に、Perl版ダイナミック・パブリッシングのプラグインをインストールします。
先程解凍したファイルの中に、「PerlDynamic」と「RebuildHelper」の2つのフォルダがあります。
それらのフォルダを丸ごと、Movable Typeのインストールにある「plugins」ディレクトリにアップロードします。
ただし、「mt-dpcache-drop.php」ファイルはアップロードしないでください。

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

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

このプラグインをアップロードした後、初めてMovable Typeにログインする際には、アップグレードのメッセージが表示されます。
画面の指示にしたがって、アップグレードの作業を行います。

5.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の拡張子の設定
perldynamic1.png

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

次に、ダイナミック・パブリッシングにするテンプレートを選びます

ダイナミック・パブリッシングを使いたいBlogで、「デザイン」→「テンプレート」メニューを選び、テンプレート一覧を表示します。
そして、インデックステンプレートまたはアーカイブテンプレートの中で、ダイナミック・パブリッシングにしたいテンプレートを編集するページを開きます。

このページの中に「テンプレートの設定」という部分がありますので、そこをクリックして開きます。
そして、「公開」の箇所を「ダイナミック」に変えて、テンプレートを保存して再構築します。
なお、アーカイブテンプレートの場合、アーカイブマッピングごとに「公開」の設定を行うことができます。

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

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

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

ダイナミック・パブリッシングにしたいBlogで、「ツール」→「プラグイン」メニューを選び、プラグイン一覧のページを開きます。
そして、「Dynamic Publishing by Perl」のところで「設定を表示」をクリックします。
すると、「初期化する」というリンクが表示されますので、それをクリックします。

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

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

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

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

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

8. .htaccessファイルの確認

環境によっては、Movable Typeのダイナミック・パブリッシングの機能をオンにした際に、.htaccessファイルが正しく出力されないことがあるようです。
その場合、上記の手順での.htaccessの書き換えが正しく行われません。

初期化の際に「.htaccessファイルの書き換えに失敗しました。」のメッセージが表示された場合は、Blogの出力先ディレクトリに、以下の内容の.htaccessファイルを手動で作成します。
また、Blogのサイトパスとアーカイブパスを別にしている場合は、アーカイブの出力先ディレクトリにも同じ内容の.htaccessを作成します。

ただし、リスト中の赤字の部分(4か所)は、Blogのトップページがサイトのルートにある場合のものです。
ルート以外のディレクトリにブログがある場合、赤字の部分を書き換える必要があります。
例えば、Blogのトップページのアドレスが「http://www.foo.com/blog/」の場合、赤字の部分を「/blog/mt-dynamic.php」にします。

## %%%%%%% 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 /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
  # passthrough query parameters
  RewriteRule ^(.*)(\?.*)?$ /mt-dynamic.php$2 [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 /mt-dynamic.php
  ErrorDocument 403 /mt-dynamic.php
</IfModule>
## ******* Movable Type generated this part; don't remove this line! *******

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

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

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

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

設定項目設定内容
インデックスページのファイル名 メインページとアーカイブページのファイル名を指定します。
初期値は「index.html」ですが、BlogをPHP化している方は「index.php」に変えてください。
ページが見つからないときの移動先のURL 間違ったアドレスのページに接続されたときには、エラーページに転送することができます。
その機能を使いたい場合は、この欄にエラーページのURLを入力します。
なお、この欄を空欄にした場合、間違ったアドレスに接続されたときには、「ご指定のアドレスのページは見つかりませんでした。」というメッセージが表示されます。
キャッシュの設定 Movable TypeのデータをMySQLかPostgreSQLに保存している場合、ページのキャッシュ機能を使うことができます。
キャッシュ機能を使いたい場合は、「キャッシュを使う」のチェックをオンにします。
また、キャッシュをオンにする場合、「キャッシュの容量」の欄で容量も指定することができます。

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

10.Blog全体を再構築する

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

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

11.テンプレートの先頭にXML宣言がある場合

小粋空間のテンプレートなど、テンプレートの先頭にXML宣言が入っている場合、そのXML宣言を以下のようにPHPで出力するように書き換える必要があります。

<?php print('XML宣言' . "\n"); ?>

たとえば、テンプレートに以下のようなXML宣言が入っているします。

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

この場合、以下のように書き換えます。

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

トラックバック(13)

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

これまでに導入したMT4のプラグインやカスタマイズ、そしてブログパーツです。 紹... 続きを読む

こんばんわ^^ 友人がダイナミック・パブリッシングにしたいとのことで以前から TRY してたようなのですが、どうしてもうまくいかず、今日わたしがリベンジし... 続きを読む

前回の続きです。 今回は導入の手順を解説します。   1. ... 続きを読む

おはよございます^^ とうとうダイナミック・パブリッシングに手を出してしまいました。 別に避けてたわけじゃないけど、なんとなくダイナミック・パブリッシン... 続きを読む

去年までLolipopでオレのBlogを構築・運営していましたが、Lolipop... 続きを読む

Movable Typeには数多くのプラグインが存在しますが、その中で私自身がぜ... 続きを読む

いろいろあきらめまして、 Movable Typeのバージョンアップを行いました。 デフォルトのテンプレートにしないと機能しない機能はあるし・・・。 かな... 続きを読む

先日苦労して入れようとしたけど入らなかった、 Perl版ダイナミックパブリッシン... 続きを読む

えいと、さくらのレンタルサーバでデータベースの利用制限があるのかわからないと書い... 続きを読む

出来るだけ、モジュールをキャッシュするようにしたので、ブログの投稿とかは少し改善... 続きを読む

忘却のかなたに・・・ - うーん、うーん2 (2009年6月30日 01:16)

こちらの記事でも書いたんですが、Perl版ダイナミックパブリッシングの構築に失... 続きを読む

The blog of H.FujimotoさんのPerl版ダイナミック・パブリ... 続きを読む

皆さんこんにちはー! 一つ前の記事でもお伝えしましたが、MTのダイナミックパブリ... 続きを読む

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

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

No.1 まえちゃん : 導入できません

壱さま。

いつも自身のブログのカスタマイズに参考にさせていただいています。最近発売された「スーパーカスタマイズテクニック」を片手にいろいろと試しています。

目的はトップページを分割したいのですが、
その前にこの「Perl版ダイナミックパブリッシング」を導入しようと、このエントリを参考に試してみたのですが、まずアップロード後ログインしてもデータベースの初期化が起こりません。
それが理由なのかはわかりませんが、そのままメインページの公開を「ダイナミック」に変更、保存、再構築すると「403Forbidden」が表示されてしまいます。

現在使用のMTは4.2RC3です。
サーバーはXREAです。

原因など分かるようでしたらご教授下さい。
宜しくお願いします。

No.2  : Re:導入できません

>まえちゃんさん
こんにちは。

インストールしたプラグインの中で、エラーが起こっているものが1つでもあると、データベースの初期化が行われません。
システムメニューのプラグインのページを開いて、エラーが起こっているプラグインがあれば、それを削除してみてください。

No.3 まえちゃん : ありがとうございます

壱さま。

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

重ねて質問なんですが、
ご指摘のプラグインのエラーなのですが、
一覧を見てエラーが発生しているプラグインは分かるのでしょうか。
パッと見では分からなかったので
もし確認方法とかがあるのであれば
ご教授いただけますでしょうか。
宜しくお願いいたします。

No.4  : Re:ありがとうございます

>まえちゃんさん
こんにちは。

プラグイン一覧では、エラーを起こしているプラグインのところには「読み込みに失敗しました」と表示されます。
また、プラグイン名が灰色で表示されます。
さらに、システムログに、プラグインのエラーメッセージが記録されます。

「パッと見で分からなかった」ということですので、プラグインのエラーではなく、別の原因かも知れません。
ただ、そうであるとすると、申し訳ありませんが、いただいた症状だけでは原因を特定することができません。
そちらのサーバーにログインしてみないと、原因は分からないと思われます。

No.5 kei : エラーについて

いつもお世話になっております。質問させて下さい。

ダイナミックに生成するよう設定したアーカイブページにアクセスすると、Internal Server Errorになります。
FTPでファイルを見てみると、「mt-dynamic.php」、「sqlsub_mysql.php」の両ファイルの末尾に「.static」が付いてしまっていました。(テンプレートの設定ではどちらもスタティックで公開するようにしてあります。)

手動で「.static」を削るとページは表示されますが、Perl版ダイナミック・パブリッシングプラグインで設定したエラーページが表示されます。削除して再構築するとまた「.static」が付きます。
ちなみに両ファイルをダイナミックに生成する設定にしても同様のInternal Server Errorです。

ここまでで問題点はお分かりになりますでしょうか?

ちなみに同じMTで別のブログも管理しているのですがこちらは問題なしです。
制作、設定したのはそのブログの方が先です。こちらはMT4.1からアップグレードしてテンプレートはいじっていません。前述の問題のブログは4.2にアップグレード後にテンプレートを初期化しました。

No.6  : Re:エラーについて

>keiさん
こんにちは。

問題が起こっているブログで、Perl版ダイナミック・パブリッシングの初期化の作業をもう一度行ってみてください。
また、RebuildHelperプラグインをMT4.2対応のもの(バージョン1.02)にバージョンアップしているかどうかも確認してください。
なお、「mt-dynamic.php」と「sqlsub_mysql.php」は、再構築方法を「手動」にしておいてください。

No.7 kei : (無題)

早速の返信ありがとうございます。
ご教示頂いた手順を試しましたが残念ながら症状が変わりませんでした。

また先程「mt-dynamic.phpとsqlsub_mysql.phpに[.static]が付く」と書きましたが、試しに他のブログから両ファイルをコピーしてきたものに.staticが付くという状態でした。

つまり問題のブログでは管理画面のテンプレートには表示されるものの(初期化の作業時に「○○のテンプレートを更新しました」のメッセージもちゃんと出ます)
、「mt-dynamic.php」と「sqlsub_mysql.php」の2つが生成されないという状態です。Internal Server Errorの原因もこれですよね。

「mt-dynamic.php」と「sqlsub_mysql.php」が生成されないのはどんな場合なのか、お分かりになりますでしょうか?

No.8  : (無題)

>keiさん
こんにちは。

mt-dynamic.phpとsqlsub_mysql.phpは、Perl版ダイナミック・パブリッシングの初期化の作業を行うときに、内部的に自動的に再構築するようになっています。
したがって、初期化すればこれらのファイルが生成されるはずですが、それでも生成されないとなると、申し訳ありませんが原因は不明です。

No.9 lychee : (無題)

いつも大変お世話になっております。

Perl版ダイナミック・パブリッシングを導入しようと考えており、
導入には成功し、見た目は問題なく稼働しているのですが、
エラーログを見ると、アクセス毎に以下のエラーログが出ており、
サーバー負荷の原因ではないかとサーバー業者から連絡が有りました。
調べてみると、このエラーログしか出ていないので、アクセスが集中した時に
重たくなっているのかと思うのですが、、

1ヶ月以上格闘していますが、解決に至らず、ご質問させて頂いた次第です。
何卒、宜しくお願い致します。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

PHP Warning: include(redirect : [サイトURL]/404.php) [function.include]: failed to open stream: No such file or directory in [サイト絶対パス]/mt-dynamic.php on line 199

PHP Warning: include() [function.include]: Failed opening 'redirect : [サイトURL]/404.php' for inclusion (include_path='.:') in [サイト絶対パス]/mt-dynamic.php on line 199

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

ちなみに、キャッシュ機能をONにすると、エラーとなり
『キャッシュの保存に失敗しました』というエラーメッセージが出る為、
現在はキャッシュの保存は利用しておりません。

必ず、2つセットでエラーログが出力されています。

もし、解決法がありましたらご教授頂けると幸いです。

宜しくお願い申し上げます。

No.11  : (無題)

>lycheeさん
こんにちは。

おそらく、ページの中に外部JavaScriptへのリンクが含まれていて、そのリンク先のアドレスが正しくないのだと思います。
そのために、ページにアクセスがあった時点で、その「存在しないJavaScript」を再構築しようとして、エラーが発生しているものと思われます。

No.12 lychee : (無題)

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

外部JavaScriptは存在していたのですが、存在はしており、
ご指摘の通り、JavaScriptを見直したところ、やはり不明で。。

えぇい!上書きで新しいファイルに入れ替えてしまえ!と入れ替えたところ!!!
無事エラーが出なくなりました!アップロード時に何かあったのでしょうか??

ちなみに、存在しないアドレスへアクセスした場合は
このエラーが発生するのは通常の動作でしょうか。

アクセスの度に発生しなくはなりましたが、存在しないアドレスへの
アクセス時には同じエラーが発生しています。

念のため…。という事で。

大変助かりました。有り難うございました。

No.13  : (無題)

>lycheeさん
こんにちは。

存在しないアドレスにアクセスした場合は、エラーページを表示するように作っています。
ただ、そちらの環境ではそれがうまく動作していないようです。
その原因は、そちらでデバッグしてみないと分からないですが・・・。

No.14 lychee : (無題)

>壱さん

有り難うございました。
そうですよね。了解です。もうすこし頑張ってみます。
とても便利なプラグインなので、ぜひ利用させて頂きたいと思っております。
今後も、宜しくお願い申し上げます。

No.41 Lynn : (無題)

>>lycheeさん
>こんにちは。

>おそらく、ページの中に外部JavaScriptへのリンクが含まれていて、そのリンク先のアドレスが正しくないのだと思います。
>そのために、ページにアクセスがあった時点で、その「存在しないJavaScript」を再構築しようとして、エラーが発生しているものと思われます。

私も199行目のエラーがでるのですが、
具体的にどこを修正したらいいのかがわかりません。。。
申し訳ありませんがご教授ください><

No.42  : (無題)

>Lynnさん
こんにちは。

申し訳ありませんが、そちらの環境で動作を見てみないことには、修正の方法は分からないです。

No.43 Lynn : (無題)

返信ありがとうございます。
それでは私では対処不可能であきらめるしかないんですね(;´д⊂)
せっかくいい物なのに残念です・・・

No.10 lychee : (無題)

すいません。

キャッシュ機能をONにした時のエラーメッセージは
『キャッシュの保存に失敗しました』

ではなく

『キャッシュの検索に失敗しました』

でした。

失礼しました。宜しくお願い致します。

No.15 s.fujino : キャッシュのテーブルが作れません

藤本さん、お世話になります。
データベース(MySQL)のバックアップ、リストアやMTアップグレード後の設定をいろいろ変えているうちに、mt_dpchache のテーブルが消えてしまいました。
PerlDynamic とRebuildHelper をインストールしなおしても mt_dpchache のテーブルができず、キャッシュの読み込みができない状態です。
(現在はキャッシュを使わずに運用できています。)

旧版の時は mt_config のテーブルから一部データを消せばいいと教えていただきましたが、現在のMT4.2用ではどうしたら最初に戻せるでしょうか?
どうぞよろしくお願いいたします。

No.16  : Re:キャッシュのテーブルが作れません

>s.fujinoさん
こんにちは。

mt_dpcacheテーブルを作り直す方法は、これまでと同じです。
データベースからmt_dpcacheテーブルを削除し、またmt_configテーブルのレコードから「PluginSchemaVersion PerlDynamic/PerlDynamic.pl=3」の行を削除します。
その後、MTにログインすると、アップグレードの画面が表示されるはずです。

No.17 s.fujino : Re:キャッシュのテーブルが作れません

さっそくありがとうございます!
mt_configテーブルを見てみましたら「PluginSchemaVersion...」がありませんでした。
mt_plugindataテーブルの、plugindata_pluginフィールドには「Dynamic publishing by Perl」というデータが見えるのですが。

No.18  : Re:キャッシュのテーブルが作れません

>s.fujinoさん
こんにちは。

プラグインが何かエラーを起こしていると、MTにログインする際に、データベースをアップグレードする処理が実行されません。
MTのログを見て、プラグインが何かエラーを起こしていないかどうかをチェックしてみてください。
もし、エラーを起こしているプラグインがあれば、それを一時的にアンインストールしてみてください。

No.19 s.fujino : ありがとうございました

壱さん、こんばんは。
私のPhpMyAdminの画面の見方が間違っていました。
mt_configテーブルのレコードをなおして、無事キャッシュから読めるようになりました。
どうもありがとうございました。

No.20 まにてん : MT4.22対応

お世話になります。
今までMT4.1で利用させていただいてたのですが、今回4.22にアップグレードしたところ、ダイナミックに設定したページを表示しようとするとBuild errorになってしまうようになりました。

アーカイブテンプレートの「ブログ記事」と「ブログ記事リスト」でそれぞれダイナミック設定にしています。
「ブログ記事」(個別エントリ)は正常に表示されますが、「ブログ記事リスト」(月別、カテゴリ)の方でエラーになり、また種類によりエラー内容が以下のように異なります。

<月別>
build error. : Can't use string ("00000001000000") as a subroutine ref while "strict refs" in use at ../RebuildHelper/lib/RebuildHelper.pm line 106.

<カテゴリー>
build error. : Can't call method "stash" on an undefined value at ../../lib/MT/ArchiveType/Category.pm line 126.

ちなみにログの方には特に関係しそうなメッセージは残っていませんでした。

一応アップグレード後にプラグインの設定で初期化をし直したりもしたのですが、何かアップグレード時の手順等で気をつけなければならない事等あったでしょうか?
それともそもそも4.22ではまだ利用できなかったでしょうか・・・

よろしくお願いします。

No.21  : Re:MT4.22対応

>まにてんさん
こんにちは。

PerlDynamicおよびRebuildHelperともに、MT4.2対応のものをお使いください。
エラーメッセージからすると、RebuildHelperプラグインのバージョンアップを忘れているのではないかと思います。

http://www.h-fj.com/mt_plugin/PerlDynamic_3_22.zip
http://www.h-fj.com/mt_plugin/RebuildHelper_1_02.zip

なお、バージョンアップしていても動作しないのであれば、申し訳ありませんが、そちらの環境で動作を追って見ないと原因はわかりません。

No.22 まにてん : (無題)

すいません、4.2用のファイルをコピーし忘れていただけのようでした。
お騒がせしました・・・汗

No.24 にる : キャッシュファイルのコピーに失敗しました

いつも色々使わせてもらってます。
先日まで問題なく動作してたのですが、
先程突然キャッシュファイルのコピーに失敗しましたと
出てしまうようになりました。

色々試したのですが直らず、これは何が原因なのでしょう?

No.25  : Re:キャッシュファイルのコピーに失敗しました

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

ご質問の件ですが、とりあえずキャッシュをクリアしてみてください。
それでもだめなようだと、サーバーの負荷が高くなっていて、Perl版ダイナミックパブリッシングが動作しきれなくなっているのかも知れません。

No.26 bzbell : (無題)

こんにちわ^^

PerlDynamic プラグイン使わせてもらってるのですが、Perl 版として動作してないと思われる以下のエラーが出て困ってます。

「Fatal error: Smarty error: [in evaluated template line 134]: syntax error: unrecognized tag 'mtjavascriptframework' (Smarty_Compiler.class.php, line 580) in /home/●●●/www/mt/php/extlib/smarty/libs/Smarty.class.php on line 1095」

サーバはさくらインターネットで、MT 4.23 を使ってます。
PerlDynamic、RebuildHelper は共に 4.22 用のものを使用してます。

わたしのお友達のサイトなのですが、わたしがダイナミック・パブリッシングにしてあげてまして、同様の手順で設置したわたし自身のサイトでは問題ありません。

上記エラーでは MTJavaScriptFramework という自作した Perl 版プラグインでエラーしてますが、他のプラグインにおいてもことごとくエラーしていまいます。

このことから Perl 版ダイナミック・パブリッシングが有効になってない!? と判断しました。

原因など分かりますでしょうか。

No.27  : (無題)

>bzbellさん
こんにちは。

おそらく、.htaccessファイルの書き換えがうまくいっていません。
この記事の「8. .htaccessファイルの確認」を参考に、.htaccessファイルが正しくできているかどうかを確認してください。

No.28 bzbell : (無題)

こんばんわ^^

解決しました (●´∀`●)

記事中の 7. を実行した際に 8. のエラーが発生してしまい、一度も成功したことがなかったのですが、8. で説明されてるように単純に .htaccess の問題かと思ってたので手作業してたのですがそれでもダメで、やむを得ず再構築で生成されるファイルとフォルダすべて削除して再度 PerlDynamic の初期化を行ったところ 7. の「初期化完了時のメッセージ」が表示されたら解決できました。

テンプレートセットを差し替えた場合毎回 PerlDynamic の初期化をする必要があるのですが、その後も 8. のエラーが表示されるものの再現することはありませんでした。

原因が明確になってないのでスッキリしないですが、とりあえずご報告まで・・・ということで。

ありがとうございました( ̄∇ ̄)

No.29 adam : 正常にリダイレクトがされない現象

はじめまして。お忙しいところ失礼致します。


Movable Type 4.2+MySQLの環境です。


ファイルのPHP化は事前に行っています。

Perl版ダイナミック・パブリッシングのプラグイン設定も、

特にエラーは起きず、正常に行うことができました。


index.phpを開くことはできるのですが、

以下のリンクをクリックしても、

リンク先のページが表示されない症状が出ています。


New Entry

Recent Comments

カレンダー

各記事のCommentなどです。


カテゴリをクリックした場合は正常に表示されます。


.htaccessファイルの確認は行い、

赤字の部分は正常に記述されております。


どのような設定がさらに必要でしょうか。

ご回答をお待ち致しております。

No.30  : Re:正常にリダイレクトがされない現象

>adamさん
こんにちは。

申し訳ありませんが、外から見た症状だけでは原因が分かりません。

No.31 日下部理恵 : Perl版ダイナミックパブリッシングに挑戦

「カテゴリ別ブログ記事リスト」と「月別ブログ記事リスト」をPerl版ダイナミックパブリッシングにしてみました。初期化でエラーが出ましたが、.htaccess ファイルを設置・確認してから再度初期化しましたら、うまくいきました。借りているサーバーは、ハッスルサーバーです。こんなすばらしいプラグインを公開していただき感謝します。

No.32 bzbell : (無題)

こんばんわ^^

PerlDynamic プラグインを利用させてもらっておりますが、一点分からないことがありまして、MTIfDynamic ブロックタグは利用可能かどうか・・・です。

ダイナミック・パブリッシングで再構築するテンプレート内で MTIfDynamic ブロックタグを使用したところ処理されませんでした。
このことからスタティック・パブリッシングと判断されてるような気がしてます(つω-`。)

PerlDynamic プラグインによるダイナミック・パブリッシングでも MTIfDynamic ブロックタグは使用可能でしょうか。

お手数ですがよろしくお願い致します。

No.33  : (無題)

>bzbellさん
こんにちは。

ご指摘の件を修正しました。

http://www.h-fj.com/blog/archives/2009/02/11-105835.php

No.34 bzbell : (無題)

こんにちわ^^

ありがとうございます (●´∀`●)
さっそく使わせて頂きます。

No.35 aura : キャッシュが使用できません。エラーになります。

はじめまして。

「Perl版ダイナミック・パブリッシング」の設置でつまずいています。
MTのバージョンは、4.25です。PHP化しています。

プラグインの初期化までは、問題なかったのですが、
「キャッシュを使う」にチェックをすると、以下のようなエラーが
出てしまいます。

「キャッシュの検索に失敗しました sql = select * from mt_dpcache where dpcache_uri = '/blog/index.php' and dpcache_blog_id = 2」

キャッシュを使用しなければ、正常にブログのページが表示されます。

サーバーの会社にも確認していただいたのですが、
以下のようなログが残っているようです。

mod_mime_magic: can't read `/(MTパス)/
plugins/PerlDynamic/mt-perl-dynamic.cgi

データベース上にも、テーブル「mt_dpcache」が
作成されていません。

各ファイルのアクセス権限が 正しく設定されているか等を
確認してみては?と、いうアドバイスをいただきましたので、

「PerlDynamic」ディレクトリの中にある「mt-perl-dynamic.cgi」と「mt-perl-dynamic-setup.cgi」のパーミッションを「755」に
変えてみたりもしたのですが、結果は同じでした。

何か、他に確認するようなところはありますでしょうか?
お手数をお掛けしますが、アドバイスなどいただけないでしょうか?

よろしくお願いいたします。

No.36  : Re:キャッシュが使用できません。エラーになります。

>auraさん
こんにちは。

ご質問の件ですが、データベースにmt_dpcacheテーブルがないと、キャッシュの処理を行うことができません。

プラグインをインストールした際に、データベースのアップグレードがうまくいかなかったようです。
サーバーの環境によって、アップグレードの処理がうまくいかないことがあり、そのパターンになっているのではないかと思われます。

MySQLをお使いで、かつphpMyAdminも使えるのであれば、以下のSQLを実行して、mt_dpcacheテーブルを作ってみると良いかも知れません。

CREATE TABLE IF NOT EXISTS `mt_dpcache` (
  `dpcache_id` int(11) NOT NULL AUTO_INCREMENT,
  `dpcache_blog_id` int(11) NOT NULL,
  `dpcache_modified_on` datetime NOT NULL,
  `dpcache_pagefile` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `dpcache_pagesize` int(11) NOT NULL,
  `dpcache_uri` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`dpcache_id`),
  KEY `mt_dpcache_modified_on` (`dpcache_modified_on`),
  KEY `mt_dpcache_blog_id` (`dpcache_blog_id`),
  KEY `mt_dpcache_pagefile` (`dpcache_pagefile`),
  KEY `mt_dpcache_uri` (`dpcache_uri`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
No.37 aura : (無題)

壱さん、こんにちは。

教えていただいたとおりに、SQLを実行したところ、
mt_dpcacheテーブルも作成されて、
「Perl版ダイナミック・パブリッシング」のキャッシュを使う
設定も無事に動作しました。

本当にありがとうございます。
感謝いたします。

No.38 aura : このSQL文は、今後のバージョンアップの時にも再利用は可能ですか?

壱さん、こんにちは。

ちなみに、今後のバージョンアップの時などに、キャッシュ用テーブルを
削除することがあるかと思いますが、今回教えていただいた、
テーブル作成用のSQLは、今後も再利用は可能でしょうか?
それとも、バージョンアップの度にmt_dpcacheテーブルを
作成するSQLは変わるモノなのでしょうか?

また、同じ症状に遭遇した時も、使用できるのかどうかが、
ちょっと心配になったものですから、質問させていただきます。

お手数お掛けしますが、よろしくお願いいたします。

No.39  : Re:このSQL文は、今後のバージョンアップの時にも再利用は可能ですか?

>auraさん
こんにちは。

プラグインの作りを大幅に変えない限りは、キャッシュ用テーブルを削除したり、構造を変えたりすることはない予定です。

No.40 aura : (無題)

>壱さん
おはようございます。

ご返事、ありがとうございます。
キャッシュ用テーブルの件了解いたしました。

今回、教えていただいたSQLは、大切に保管しておきます。

これからも使用させていただきますので、よろしくお願いいたします。

No.44 room13 : (無題)

はじめまして。

PerlDynamicをインストールして、トップページを確認すると、

「Warning: fsockopen(): unable to connect to ******:80 in /***/***/mt-dynamic.php on line 88 communication error」

というエラーが、白画面に表示されてしまいます。
エラーの原因を教えて頂きたいです。

【環境】
MTバージョン:4.23
サーバー:Linux
Perlバージョン:5.8.0
PHPバージョン:4.4.2
PHP化なし
セットアップ方法は、このページに載っている通りに実施しました。

ご回答を宜しくお願いいたします。

No.45  : (無題)

>room13さん
こんにちは。

このプラグインでは、PHPの内部でCGIにアクセスする処理をしています。
エラーメッセージは、そのアクセスに失敗したことを表しています。

推測ですが、HTTPではなくHTTPSの環境で、このプラグインを動かそうとしているのではないでしょうか。
申し訳ありませんが、このプラグインはHTTPSでの動作は考慮していません。

No.46 room13 : (無題)

迅速なご回答ありがとうございます。

>推測ですが、HTTPではなくHTTPSの環境で、このプラグインを動かそうとしているのではないでしょうか。
⇒残念ながら、https環境ではなく、httpの環境で作業を行っております。
これ以外に考えられる原因はありますでしょうか?

No.48  : (無題)

>room13さん
こんにちは。

申し訳ありませんが、症状から他に考えられることは、以下のことぐらいです。

1.エラーメッセージの「connect to ******:80」の「******」が、何らかの原因で、存在しないホスト名もしくはIPアドレスになっている
2.Webサーバーを80番以外のポートで動作させている

No.49 room13 : (無題)

>壱さん

迅速なご回答ありがとうございます。

>1.エラーメッセージの「connect to ******:80」の「******」が、何らかの原因で、存在しないホスト名もしくはIPアドレスになっている
⇒******は、実際に存在するホスト名になっています。
ちなみに、何らかの原因とは、どのようなことが考えられるのでしょうか?

>2.Webサーバーを80番以外のポートで動作させている
⇒ポートチェックサイトでポートをチェックしたところ、80番で問題なかったです。

No.50  : (無題)

>room13さん
こんにちは。

申し訳ありませんが、これ以上のことは、いただいている情報からでは推測できません。

No.47 room13 : (無題)

迅速なご回答ありがとうございます。

>推測ですが、HTTPではなくHTTPSの環境で、このプラグインを動かそうとしているのではないでしょうか。
⇒残念ながら、https環境ではなく、httpの環境で作業を行っております。
これ以外に考えられる原因はありますでしょうか?

No.51 bzbell : (無題)

こんばんわ^^


MT4.26 にて Perl 版ダイナミック・パブリッシングを使ってます。最近気づいたのですがダイナミックなページを表示すると「キャッシュの検索に失敗しました」といったエラーメッセージが表示され再構築されなくなりました。
これは PerlDynamic プラグインのキャッシュ機能を無効にすると、とりあえず回避することができます。


データベースを確認したところ、mt_dpcache テーブルが「使用中」と表示されており、テーブルがクラッシュされてるからリペアするように…といったメッセージが表示されたのでテーブルを修復しました。
結果、元通りキャッシュされるようになりました。


mt_dpcache テーブルがクラッシュする要因についてお聞きしたかったのですが、とりあえずご報告まで (; ̄∇ ̄A

No.52  : (無題)

>bzbellさん
こんにちは。

テーブルがクラッシュした原因は、申し訳ありませんが不明です。
考えられる原因としては、サーバー負荷でPHPの処理が中断したといった、システム的なトラブルによることがあると思われます。

No.53 日下部理恵 : メインページが表示されなくなりました。

こんにちは(こんばんは)。
私のブログサイトは、ウェブページ以外ぜんぶ Movable Type 4.261 Perl版ダイナミック・パブリッシングで作っていまして、数ヶ月トラブル無しに使っていました。キャッシュを使うようにしています。

PerlDynamic_3_23 このプラグインを停止して、「ダイナミック・パブリッシング」は、どのようなものか試しにメインページを表示してみました。この時は、表示されず、Internal Server Error が出てしまいました。プラグインを使うように戻しました。

それから、トラブルが出るようになってしまい、メインページが表示されなくなりました。それ以外のページは問題なく表示されますが。

メインページは、表示されないか、あるいは、「キャッシュファイルのコピーに失敗しました」と出てしまいます。

何か対策はございますでしょうか?

No.54  : Re:メインページが表示されなくなりました。

>日下部理恵さん
こんにちは。
以下の作業を行ってみてください。

1.phpMyAdminでMTのデータベースを操作できる状態にします。
2.mt_dpcacheテーブルの内容を空にします。
phpMyAdminで、データベース内のテーブルの一覧を表示し、mt-dpcacheテーブルの行の「操作」の中で、右から2番目の「空にする」ボタンをクリックします。
3.2.と同様の手順で、mt_fileinfoテーブルの内容を空にします。
4.MTにログインします。
5.ブログ全体を再構築します。

No.55 日下部理恵 : Re:メインページが表示されなくなりました。

こんにちは。
アドバイスの通り実行してみました。再構築も全部すませました。

でも、メインページのみ表示できません。メインページのインデックスをスタティックに変えて再構築を試しましたが、Internal Server Error が出てしまいます。このエラーは、アドバイスの前から出ていました。ダイナミックだから、エラー出ても大丈夫だと考えていました。問題の切り分けが進んだように思います。

もう少し自力でがんばってみます。アドバイスありがとうございました。

No.56 日下部理恵 : ダイナミック・パブリッシングとPerl版ダイナミック・パブリッシング共存できますか?

こんにちは。
ブログのメインページは、藤本さん作のプラグインを使って「最近のコメント」と「最近のトラックバック」を表示するので、Perl版ダイナミック・パブリッシング用の「htaccess」を使います。これをブログのルートディレクトリーに置きます。

アーカイブは、違うディレクトリーにして、ただのダイナミック・パブリッシングにするため、そのディレクトリーにダイナミック・パブリッシング用の「htaccess」を書きます。

このようなことは、実行可能ですか?お忙しいところ、申し訳ありません。

No.57  : Re:ダイナミック・パブリッシングとPerl版ダイナミック・パブリッシング共存できますか?

>日下部理恵さん
こんにちは。

試してはいませんが、ご質問いただいたようなことはできるはずです。

No.58 日下部理恵 : Re:ダイナミック・パブリッシングとPerl版ダイナミック・パブリッシング共存できますか?

こんにちは。
ご教授、ありがとうございます。試したところ、共存は問題ないようです。

情報です。ハッスルサーバーの場合ですが、
「.htaccess」の三行目
# Options -Indexes +SymLinksIfOwnerMatch

このように、# を付けなければなりません。付けないと、Internal Server Error になってしまいます。これは、もちろん、Perl版ダイナミック・パブリッシングでも、ただのダイナミック・パブリッシングでも、です。

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

No.59 footbrain : mt-dynamic.php on line 199

No.9 lychee : (無題) 、No.41 Lynn : (無題) と同様に、”mt-dynamic.php on line 199”エラーが発生します。

ブログ記事の編集ページで、「保存」を行った時に発生し、また、同時期にmt.cgiのページを開こうとすると、”エラーが発生しました: Connection error: User footbrain already has more than 'max_user_connections' active connections”と表示されます。

なにもできないので、暫く放置しておくとエラーは解消されてますが、原因を特定する事ができず、苦労しています。

「存在しないアドレスにアクセスした場合は、エラーページを表示するように作っています。」とありましたが、見かけの上では、「存在しないアドレス」は存在せず、エラーページは表示されません。

この問題を解決する手だて、ヒントはありませんか?

No.60  : Re:mt-dynamic.php on line 199

>footbrainさん
こんにちは。

エラーメッセージからすると、MySQLに同時にアクセスできるプロセス数の上限を超えているようです。
phpMyAdminで「プロセス」のページを開くと、現在接続中のプロセスの一覧が表示されますので、Sleep状態になっているプロセスを停止してみてください。

No.61 footbrain : (無題)

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

プロセスの一覧を確認するためにphpMyAdminを開こうとするのですが、ここでもログインの際に'max_user_connections'と同様のメッセージが表示され、確認することができなかったと記憶しています。

できないものと思い込み、以降試していませんでしたが、次回エラーが発生した際には試してみようと思います。

コメントする