yenomoto

ダイナミックパブリッシング設定時に「ページが見つかりません(An error occurs.)」が表示される。

2

初めて投稿させていただきます。

現在、MovableTypeの勉強中ですが、
「ブログテンプレートの管理」→「アクション」→「公開プロファイルを設定」
から「ダイナミックパブリッシング」を設定し、テンプレートの作成を行い、
サイトの表示を行ったところ、

「ページが見つかりません。 An error occurs.」
が表示されてしまいます。

MTのバージョンは、5.06です。
環境は以下の通りです。
OS:WinXPPro SP3
WebServer:Apache 2.2.11
Perl:ActivePerl Ver.5.12.4(32bit)
PHP:Ver.5.2.9
MySQL:5.1.33
(ActivePerl以外は、XAMPP1.7.1に同梱)

動作させているテンプレートですが、
翔泳社発行の「CMSとして使うMovableType5ガイドブック」に
掲載されている「CHAPTER-05 コミュニティサイトを制作する」の
「テンプレートの作成(01 お知らせの作成)」の内容です。
(p291-p306のテンプレートです。)

p291以前の内容については入力済みです。
入力後、「お知らせ」を表示させるところで上記エラーが発生します。

上記エラーを元にして、いろいろと調査をして
対応してみましたが、現象は変わりませんでした。
完全に行き詰まった状態です。

まずは、環境に起因するものなのか、テンプレートに起因するものなのか?
を切り分けたく、ここで質問させていただきました。
テンプレートの方は参考書に載っているもので、
お持ちの方しかわからなく、大変申し訳ございませんが、
どなたかアドバイスいただける方がいらっしゃいましたら、
アドバイスいただければと思います。

以上、よろしくお願い申し上げます。

返信(19)

| 返信する
  • そもそものダイナミックパブリッシングの動作確認はしているのでしょうか?
    テンプレートの環境依存の調査の前に、システム設定自体の環境確認はすんでますか。
    一番簡単な確認方法は、とだけ書いたテンプレートを作成して、ダイナミックパブリッシングにして表示させてみる事です。
    現在日時が表示されているようなら、ダイナミックパブリッシングは動作しています。

  • いけね、エンコード忘れた。

    <MTDate>

  • oscarさん、こんにちは。

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

    いただきましたアドバイスを元に

    <$MTDate$>
    をテンプレートに設定し、
    動作させたところ、現在日時が表示されました。

    このことから、ダイナミックパブリッシングは
    動作していると考えられます。

    以上、よろしくお願い申し上げます。

    • なるほど、だとしたらよっほど特殊なケース以外、環境依存は考えられないのでは?
      というのも、書籍のサンプルですよね。サンプル自体に問題があったら、早い段階で差し替えが行われるはずです。
      問題があるなら、書籍のサイトに更新データか、正誤表がある気がします。発行後それなりに時間が経っているので。

  • oscarさん、こんにちは。

    アドバイスありがとうございます。

    この本の正誤表は
    http://www.seshop.com/book/errata/12097/list
    で公表されていて、こちらもチェックしてみましたが、
    該当部分での誤りはありませんでした。

    環境の可能性が低くなったと言うことで、コードの方をもう少し
    調査してみようと思います。

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

  • スタティック・パブリッシングと、ダイナミック・パブリッシングはテンプレートを出力する
    際の言語がPerlとPHPで異なるので、まったく別物だと考えたほうが良いと思います。

    ちょっと気になったのですが、その書籍の該当の箇所はダイナミックで動かすように指示が
    あるのでしょうか?

  • riatwさん、こんにちは。

    コメントありがとうございます。

    該当著書のp297に「公開プロファイルの設定」の
    説明があるのですが、ここにダイナミックパブリッシングに
    設定するよう説明があります。

    その後の追加情報になりますが、
    いったんすべて削除しサイトから構築し直しましたが、
    現象は同じでした。

  • yenomotoさん、こんにちは。

    なるほど、書籍の方でダイナミックにする指示があればテンプレートの方に誤植が
    無ければ、ダイナミックで動くはずですね。

    いまさらな確認ですが、使われているMovableTypeの方はMTOSではないですよね?

  • riatwさん、こんにちは。

    MovableTypeは、以下のサイトからダウンロードしています。
    https://mtuser.sixapart.jp/Form/Enquete/Default.aspx?dpid=0&enqid=0000000023
    ここから5.06を選択し、ダウンロードいたしました。
    MTOSではないです。

    著書では5.01を使用しているようですが、
    該当バージョンがないようでしたので、一番近い5.06を選択しています。

  • yenomotoさん、こんにちは。

    MTProでしたか、、だとしたらMTCSも同梱されているので大丈夫のはずです。

    後は該当のテンプレートと、それと紐づいているモジュールを眺めて行って、
    以下の2点を注意深く見ていくしかないと思います。
    (大体このエラーの原因はこのあたりなので)

    ・ダイナミック非対応の部分が無いか
    ・テンプレートの記述ミスが無いか

    書籍の内容をまるごとコピーした場合はありえませんが、スタティックでしか
    動作しないプラグインのMTタグが混入して場合などに上記のエラーが出た記憶があります。

    多くのダイナミックパブリッシングエラーが今回発生したエラーにつながると思うので
    もし出来るならテンプレートを一回スタティックで再構築をかけてエラーが出ないかを
    検証したほうが良いと思います。


    無難なことしか言えずに申し訳ありませんが、
    がんばってみてください。

  • yenomotoさん、はじめまして。
    僕も以前そのエラーに泣かされたことがありました。
    <$mt:Date$>だけでダイナミック表示したらうまくいくのに、デフォルトのクラシックブログのテンプレートをダイナミックで表示すると「ページが見つかりません。 An error occurs.」と言われてしまいました。
    その時は、たしか WidgetSet の読み込みをやめたらエラーが表示されなくなりました。
    <$mt:WidgetSet name="hoge"$>の部分を削除してうまくいきました。
    参考になれば良いのですが・・・

  • >yenomotoさん
    著者の一人です。ご連絡遅くなってすいません。

    私が担当している章ではないため確かな情報ではありませんが、動作を確認したところ、同じエラーが発生しました。

    切り分けを行ったところ、「メインページ」インデックステンプレートの以下の3行のパスが正常に生成されていないことが原因のようです。

    require_once($_SERVER{'DOCUMENT_ROOT'}.'/commons/scripts/functions.php');
    require_once(INC.'header.php');
    …中略…
    require_once(INC.'footer.php');

    まずは上記の3行の行頭に「//」をつけてコメントアウトし、エラーが出ないことを確認願えますでしょうか。
    よろしくお願い致します。

  • mt-config.cgiに

    DebugMode 1

    を記述すると「An error occurs.」だけやのうてもうちょっと詳細のエラーとかワーニングを表示してくれますので、まずその結果を見た方が良いと思います。

  • コメントをいただきました皆様。
    本当にありがとうございます。

    その後、著書と見比べてチェックをしてみたのですが、
    どうしてもうまくいきませんでした。

    >riatwさん、tinybeansさん
    参考になるアドバイスありがとうございます。
    デバックのポイントなど、今後の参考になりました。
    再度チェックし直してみます。

    >yujiroさん
    著者の方に出てきていただけるとは、大変恐縮しております。

    ご指摘いただいた部分につきましては、確認し、
    こちらで報告させていただきます。

    >Junnama Nodaさん
    アドバイスありがとうございます。
    試してみます。

    以上、よろしくお願い申し上げます。

  • yujiroさん、こんにちは。

    アドバイスいただきました、以下の部分ですが、
    >require_once($_SERVER{'DOCUMENT_ROOT'}.'/commons/scripts/functions.php');
    >require_once(INC.'header.php');
    >…中略…
    >require_once(INC.'footer.php');
    の部分をコメントアウトし、実行してみましたところ、
    エラーは発生しませんでした。
    ただ、気になるのは、テキスト表示のみしか行われないことです。

    Junnama Nodaさんのアドバイスを元に
    DebugMode 1を追記し、動作させたところ、
    以下のメッセージが表示されました。

    ページが見つかりません。

        require_once(V:/MovableType_CMS2/commons/scripts/functions.php) [<a href='function.require-once'>function.require-once
    </a>]: failed to open stream: No such file or directory

    少し話は外れますが、気になったことは、
    ダウンロードしたファイルから取り出したテンプレートの
    記述と著書の記述が異なる部分がいくつかあったことです。

    一例を挙げさせていただきますと、
    p304-305のdetail.tmplの記述ですが、
    ダウンロードしたテンプレートには、
    if($pc) {
    ?>
    で始まる条件分岐があります。

    私が持っている著書の版数は1版です。
    直接の関係はないかもしれませんが、気になる部分ではありますので、連携させていただきます。

    以上、よろしくお願い申し上げます。

  • >yenomotoさん
    ご確認ありがとうございます。

    まず前半のエラーメッセージですが、「/MovableType_CMS2/commons/scripts/functions.php」がみつからないということなので、サンプルにある1つめのrequire_once()に設定しているパスに問題があると思われます。

    書籍の007ページの説明では「サイトを設置したいディレクトリに「commons」を~」とありますが、サンプルコードをそのまま利用する場合はドキュメントルート直下に「commons」をアップロードしないといけなくなります。説明が不十分で申し訳ありません。

    頂いたエラーメッセージでは「MovableType_CMS2」ディレクトリ配下に「commons」をアップロードされているようですので、1つめのrequire_once()を以下のように書き換えてみて頂けますでしょうか。

    require_once($_SERVER{'DOCUMENT_ROOT'}.'/MovableType_CMS2/commons/scripts/functions.php');

    また、

    require_once(INC.'header.php');
    require_once(INC.'footer.php');

    を正常に動作させるために、1つめのrequire_once()で読み込むfunctions.phpの2~3行目、

    define('ROOT',$_SERVER['DOCUMENT_ROOT']);
    define('INC',ROOT.'/commons/includes/');

    を次のように修正願えますでしょうか(修正は3行目のみです)。

    define('ROOT',$_SERVER['DOCUMENT_ROOT']);
    define('INC',ROOT.'/MovableType_CMS2/commons/includes/');

    後半のご指摘についてはおっしゃるとおりですので、別途確認して回答致します。

  • >yenomotoさん
    補足です。
    require_once()のパスを書き換える場合、292ページのheader.tmplのscript要素のパスなどもすべて書き換える必要があるため、「commons」をドキュメントルート配下に変更して頂いた方が修正量が少なく済むかもしれません。

  • yenomotoさん
    はじめまして、本章担当しました高山といいます。
    ソースコードが違う部分についてですが、7章でこのテーマをスマートフォン対応させるために一度作ったテンプレートに手を加えていくのですが、そのソースコードが反映された状態のテンプレートになってしまっておりました。ですので、本書の中のソースコードが正しいです。
    混乱させてしまい申し訳ありません。。

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

  • yujiroさん、高山一登さん、こんにちは。

    担当された高山さんにも出てきていただきまして、
    大変恐縮しております。
    ソースコードの違いにつきましては、了解いたしました。

    コメントありがとうございます。
    返信遅くなりまして、申し訳ございませんでした。

    アドバイスいただきました内容を参考に修正を行ったところ、
    無事動かすことが出来ました。

    ただ、パスの記述がアドバイスいただいた通りでは
    動かなかったので、以下のようにいたしました。

    現在、MovableTypeは /MovableType_CMS2配下にインストールしてあります。$_SERVER{'DOCUMENT_ROOT'}には、/MovableType_CMS2
    がすでに格納済みでした。このままですと、/MovableType_CMS2
    が二重に記述されてしまうことになり、エラーとなってしまいます。

    今回、該当章の内容は/sns配下に格納するようにしています。

    そのため、
    require_once($_SERVER{'DOCUMENT_ROOT'}.'/MovableType_CMS2/commons/scripts/functions.php');の部分につきましては、
    require_once($_SERVER{'DOCUMENT_ROOT'}.'/sns/commons/scripts/functions.php');といたしました。

    define('ROOT',$_SERVER['DOCUMENT_ROOT']);
    define('INC',ROOT.'/commons/includes/');
    については、
    define('ROOT',$_SERVER['DOCUMENT_ROOT']);
    define('INC',ROOT.'/sns/commons/includes/');
    と記述いたしました。

    /sns配下に格納している関係で、
    header.tmpl内など、該当する部分につきましても、
    変更しています。

    ここで確認なのですが、
    上記の内容で修正を行い、表示させたところ、
    p306の例の右上のログイン部分が表示されませんでした。
    今回、この調査を行ったため、返信が遅れてしまいました。

    調べたところ、p292のheader.tmplの15行目のmt.jsを
    読み込む部分で、mt.jsがうまく読み込めていないことがわかりました。

    該当部分の説明では、mt.jsは各ブログのものを読み込むようにし、
    各ブログに存在しないときは、ウェブサイト用のmt.jsを
    読み込むとなっています。

    著書のソースのまま実行すると、p292の15行目の記述で、
    PHP変数$jsDirに変数が設定されていないため、commons/script配下のmt.jsが読み込まれることになります。

    ただ、commons/script配下には、mt.jsが存在しないため、
    エラーとなってしまいます。commons/script配下に
    mt.jsを作成するような記述が見当たらないのですが、
    このあたりはいかがでしょうか?

    各ブログのmt.jsを読み込ませるために、
    p298のindex.tmpl,p303のlist.tmpl,p304のdetail.tmplに
    $jsDirを定義し、各ブログのmt.jsまでのパスの記述が
    必要になると思うのですが、いかがでしょうか?
    (私の場合は、お知らせについてはnewsフォルダーに
    格納しているため、sns/news/としています)

    上記の設定を行ったところ、p306のサンプル通りに、
    表示されました。

    対応中に気になったところですので、
    連携させていただきます。

    以上、よろしくお願い申し上げます。

返信する