2006年9月27日

MTに脆弱性が確認されたそうだ

category: MovableType — abetomo @ 0:40:12

メールチェックしたら、ロリポからこんなお知らせが。

シックス・アパート株式会社(以下、シックス・アパート)が提供するブログシステム「Movable Type」のプログラムにおきまして、クロスサイトスクリプティングによる脆弱性が発見されました。

「Movable Type」をご利用のお客様はバージョンアップを行ってください。バージョンアップの方法につきましてはシックス・アパートのニュースをご参照ください。

【重要】 Movable Type 新バージョンとパッチの提供について

ええ~、面倒くさい。でも対応しないわけにはいかないので、とりあえず3.2用のパッチを適用しておいた。本当はバージョンアップしたほうがいいんだけど、それはさすがに時間がかかるので、また今度にしよう。

ていうか、いつの間に個人ライセンス無償版のダウンロードはECバイヤーズ経由になったんだ?バージョン3.33のダウンロードだけでも先にしておこうと思ったら、まずダウンロードの申し込みとやらをしなくてはならなくて、その準備完了メールがきてからでないとダウンロードできないらしい。あああ面倒だな。とか書いてる間にメールがきたけど。

2006年5月14日

MovableType 3.2へアップグレード

category: MovableType — abetomo @ 19:49:00

久しぶりに暇ができたので、ふと思い立ってMovableTypeを3.171から3.2へアップグレードした。

MovableType3.2へのアップグレード方法」などを参考に、実行。3.2の管理画面に入り、データベースを移行、再構築・・・まではうまくいったのだが、ブログの個別記事や月別アーカイブページを開くと、次のようなエラーがでてしまった。
(続きを読む…)

2006年2月14日

渡りに船

category: MovableType — abetomo @ 22:49:31

最近、MySQLサーバが重くてブログの更新がままならないので、SQLiteに移行しようと思っていたところへ、ロリポップからデータベースサーバー増強のお知らせがきた。

やったー。これでちょっとは軽くなるかな?移行するのも結構面倒くさいし、さくさく動くようになるんだったらこのままでもいいや。ひとまず様子を見てみよう。

2005年8月17日

MySQLのエラーにビビる

category: MovableType — abetomo @ 8:25:09

夜12時頃、ブログにログインしようとしたらこんなエラーメッセージが出た。

Got an error: Bad ObjectDriver config: Connection error: Lost connection to MySQL server during query

うひー、またまた見たこともないエラーが!
再度ログインしても同じメッセージが出るし、そのうちログイン画面自体が出てこなくなってしまった。

MySQLサーバのエラーらしいことは分かったけど・・・まさかデータベースが壊れたか!?でもブログはちゃんと表示されているし。

検索してみたら、どうもMySQLサーバへのアクセスが集中していて一時的に接続できないか、サーバ側がなんらかのエラーを起こしているか、いずれにせよデータベースが壊れたとかそういう問題ではなさそうだった。

まあ、夜中はブログを更新しようとする人も多いだろうし、アクセス集中で落ちることはあり得るなあ・・・。

ということで、朝になってからログインしてみたら問題なく動いた。どうやらロリポップではたびたび起きているエラーらしいので、忘れないように書き留めておこう。

2005年7月28日

共通部分をモジュール化

category: MovableType — abetomo @ 23:50:35

すっかり連載のようになってしまったMovableType構築記の続きです。

そもそもサイドメニューなどの共通部分をインクルードしたくてPHP化することにしたのだ。ここからがカスタマイズの本題なのである。

前回こんなこと言ってたんだけど、またしてもつまづいてしまった。

<? include("/xxx/sidemenu.php");?>のような感じでアーカイブテンプレートにインクルードを記述して再構築しても、アーカイブページにはさっぱり表示されないのだ。

パスの設定(/xxx/のところ)が間違っているのかと思っていろいろ試してみたけど、フルパスにしても相対パスにしてもやっぱり表示できない。インデックス・テンプレートのアーカイブの拡張子をphpに変えてもダメだった。

ならばメインページはどうか?と、メインページのテンプレートに記述して再構築したら、ちゃんと表示できた。ということは、sidemenu.php自体はちゃんと構築できているらしい。

そこでMTInclude moduleでアーカイブテンプレートに記述してみると、今度は表示できた。まあ、これはPHPじゃなくても使えることは確認していたので当然だろうけど。

これはどういうことかと調べてみると、「ダイナミック・パブリッシング導入法」(HINAGATA)に、こんなことが書いてあった。

PHPなどで外部ファイルをインクルードしていると、そのままでは動的に生成できません。外部ファイルをインクルードしたい場合は、MT管理画面のテンプレート管理の一番下にあるテンプレート・モジュールでモジュール化し、以下のようにしてインクルードします。

あれ~?もしかして、PHP化することと、ダイナミック・パブリッシング機能を使えるようにすることって別なのか??PHP化=ダイナミック・パブリッシングだと思っていたんだけど、PHPインクルードにするには拡張子を「php」に変えるだけで良かったのか?

ダイナミック・パブリッシングを導入するとき、再構築オプションで「アーカイブのみダイナミック」を選択したんだけど、ということは、メインページはダイナミック生成をしていないからPHPインクルードが使えて、アーカイブページはダイナミック生成をしているからPHPインクルードが使えない、ということなんだろうか。

よく分からないけど、きっとそうなんだろう。

ダイナミック生成をする限り、結局MTIncludeを使ってインクルードするしかないらしい。まあ、PHP化したおかげで、テンプレート・モジュールでモジュール化した部分を更新すれば即反映されるようなので、別にMTIncludeでもいいんだけど(スタティック生成のときは、再構築しないと更新した内容が反映されなかった)。

というわけで、メインページだけPHPインクルードにしても仕方ないので、共通部分のインクルードにはMTIncludeを使うことにしよう。あとはカテゴリページの分割か。

MySQL移行に成功、いよいよPHP化

category: MovableType — abetomo @ 8:44:07

MTが復活したところで、再びMySQLへのデータベース移行を試みた。

今度はサブカテゴリがない状態(親カテゴリのみ)にしておき、一回インポートした記事も削除してテストエントリーを3本ほど残した状態で作業した。

ロリポップの手順通りデータベースを作り、mt.cfgとmt-db-pass.cgiを書き換え、転送。そしてmt-db2sql.cgiにアクセス。待つこと数秒・・・

Done copying data from Berkley DB to your SQL database!

というメッセージが出た。成功したらしい。やった!・・・長い道のりだった。

いやいや、これで終わったわけではない。次はダイナミックパブリッシングの導入だ。

ロリポップの「MovableType3.1のダイナミックPHPページ生成を使用する場合」の手順に従い、以下の作業をする。

  • ブログのディレクトリにtemplates_cフォルダを作る
  • MTにログインして、「再構築オプション」で「アーカイブのみダイナミック」を選択、保存
  • インデックス・テンプレート一覧の「ダイナミック・テンプレート用起動スクリプト」を選択、保存

これだけである。あっけない。ちなみに.htaccessは自動生成されるので、特に作る必要はなかった。

さて、試しにテスト記事を投稿してみると、処理にかかる時間が劇的に短くなっていた。まあ、記事をほとんど削除したのでデータ量が少ないということもあるだろうけど、それにしても早い。この後も、テンプレートを変更して再構築するたびに処理の早さを実感した。ちょっと感動。

ちなみに、最初のテスト投稿のときは拡張子が「html」のままだったんだけど、今後のことを考えて「php」に変更した。
(続きを読む…)

2005年7月27日

MT復旧!再構築エラーの原因は・・・

category: MovableType — abetomo @ 15:04:30

MySQL移行失敗、そしてMT再構築エラー」の続き。

データ量を減らそうと思って、いったんインポートした記事を100件ほど削除したところ、次のようなエラーが出て再構築ができなくなってしまった。

Can’t use an undefined value as a SCALAR reference at lib/MT/Template/Context.pm line 780

この Context.pm というのがperlのファイルだということはすぐ分かった。だけど、何を直したら良いのかが分からない。

そこで、同僚のエンジニアさんに聞いてみた。すると、エラーそのものの意味は分からないが、記事を削除したことで該当記事が0になったカテゴリがあって、それがエラーを起こしているのでは?とのこと。

なので、まずはテンプレートからサイドメニューのカテゴリの記述を抜いて、再構築してみたらどうか、というアドバイスをもらった。

なるほど。そういえばデータベースの移行に失敗したのはカテゴリ絡みのエラーらしいし、確かにカテゴリがくさい気がしてきた。

ということで、さっそく全てのテンプレートからサイドメニューの「最近の記事」「最近のコメント」「カテゴリ」のリストを外した。それから、カテゴリ設定ページで「エントリー」が0になっているカテゴリを全て削除した。ついでにサブカテゴリもなくしておいた(後のMySQL移行のため)。

そしたら、難なく再構築できてしまった。おぉ、やっぱりカテゴリのせいだったのか?エンジニアさんのご指摘はビンゴだったのだ。お礼に“イケメン・エンジニア”の称号をあげよう!(いらない)

さらに原因を突き止めるため、外したリストを1つずつテンプレートに戻して再構築してみることに。すると「カテゴリ」だけでなく、「最近のコメント」のリストがあるときもエラーが出ることが分かった。

カテゴリはともかく、なんでコメントまで??

なんだかよく分からないが、とりあえず考えられるのは、カテゴリやコメントを呼び出す記述が間違っているということ。そこでまずはカテゴリの記述をよーく見てみると・・・あらら?

<$MTCategoryLabel$>となるはずのところが、なぜか<MTCategoryLabel>になっていた。

たぶんコレが原因だろう。でもなんで「$」が抜けているのかよく分からないが・・・。たぶん、どこかからコピペしたときに間違っていたんだろう。(だとしたら、よく今までエラーが起きなかったなあ)

ということで、「$」を追加してテンプレートを再構築してみた。問題なく完了。ブログのメインページのサイドメニューにもカテゴリリストが表示されている。やった!

次に、コメントの記述も「$」が抜けてるんじゃないかと思ってよく見たけど、こっちは特に間違ってはいない模様。じゃあなんで?と思った瞬間、あることに気がついた。

そういえば、記事自体は削除されているのに、その記事についたコメントが1件だけ取り残されていたのだ。そうか、きっとこれに違いない!

そのコメントを削除して、サイドメニューに「コメント」リストを追加して再構築すると・・・成功!

というわけで、今回の再構築エラーの原因をまとめると、

  • 過去記事を削除したことで、該当記事が0になったカテゴリがあった。
  • サイドメニューのカテゴリリストの記述が間違っていた。
  • 該当記事が削除されているのに、コメントだけが残っていた。

ということになるかと。でもカテゴリが0になったことでエラーを起こすんだったら、親階層のカテゴリは敢えて0件にする使い方もあるだろうから、それもエラーを起こすことになるんだろうか?とちょっと腑に落ちないけど・・・。

ともかく、これでMTを最初からインストールする手間は省けた。バンザイ!

この後またMySQLへの移行に挑戦したんだけど、長くなったのでまた今度。

このエントリーは

投稿クライアントの「BlogWrite」

により投稿されました。

2005年7月26日

MySQL移行失敗、そしてMT再構築エラー

category: MovableType — abetomo @ 16:21:50

ブログ移転するかも」の続き。

エラーが起きたりしなければいずれ移転すると思います。

なんて軽く言っていたけど、やっぱりそう簡単にコトは進まなかった・・・。

このココログ版「写真な日々」と同じレイアウトにしようと、インデックスやアーカイブのテンプレートはすぐ書き換えたんだけど、これだけではサイドメニュー(最近書いた記事リストが並んでいる右側メニュー)の「オススメ」などを更新したいときはいちいちテンプレートを書き換えなければならない。やっぱりサイドメニューは共通化して、更新を楽にしたいと思った。

それにはインクルードだろう、ということで調べてみると、MTIncludeを使う方法やSSIのインクルードを使う方法、phpを使う方法など、やり方はいくつかあることが分かった。

一番手っ取り早いのはMTIncludeなんだけど、これだとサイドメニュー単体を更新しただけではブログに反映されない。サイドメニューが入っているアーカイブを再構築しなければ、最新の状態にならないのだ。しかしそれじゃあ意味がない。そもそも再構築を避けたくてインクルードにしようと思っているわけだから。

SSIのインクルードを使うこともできるけど、ウチのサーバの場合、拡張子を.shtmlにしなければならないので、なんとなくダルい。それにどうせなら、ページ分割とか、ココログではできないことをしてみたいと思った。

というわけで、思い切ってphp化してみることにした。

まずはMySQLへの移行作業。データベースを作って、mt.cfgとmt-db-pass.cgiを書き換えるところまではうまくいった。

そしてmt-db2sql.cgiにアクセス。が・・・なんか途中で止まってしまった模様。もう一度mt-db2sql.cgiにアクセスしてみると、こんなメッセージが出た。

Table ‘mt_author’ already exists at mt-db2sql.cgi line 53.

「mt_author」というテーブルはすでにあるよ、というエラーらしい。検索してみたら、やはり同様のエラーでMySQL移行に失敗した例が出てきた。

それによると、どうやらカテゴリを階層化しているとエラーが起きるらしい。それから、mt.cfgの「DataSource ./db」の先頭に「#」は付けないほうがいいらしいということも。

しかしMT関連のテーブルを削除してやり直したらうまくいったという例もあったので、とりあえずそのようにしてみることに。ついでにmt.cfgの「DataSource ./db」から「#」を外して転送し、再びmt-db2sql.cgiにアクセス。・・・また失敗。

むう。やっぱり、カテゴリを全て親カテゴリにしておかないとダメなのか?

そこで、もう一度MT関連のテーブルを削除してからMTにログインしてみた。するとログインはできたものの、テンプレート編集画面やエントリー投稿画面やカテゴリー編集画面へのリンクがなくなっていた。これでは、カテゴリの設定を変えることもできない。

たぶん、テーブルを削除しちゃったから、どこにもデータベースがない状態になってしまったんだろう。
(ちなみに、ブログ自体はちゃんと見えていて、表示がおかしくなったりはしていなかった)

面倒くさくなったので、最初からやり直すことにして、MySQLのデータベース自体を削除した。mt.cfgも最初の状態に戻して、それからまたMTにログインすると元通りになっていた。

なーんだ、最初からMovableTypeをインストールし直さなくても済んだぞ。

と喜んだのもつかの間のこと。

この前ココログから全記事をインポートしたんだけど、あれを少し減らしてから移行作業をしたほうがデータ量も少なくていいだろう、と思って100件くらい削除したら、今度は再構築時にエラーが出るようになってしまったのだ。

An error occurred:
Can’t use an undefined value as a SCALAR reference at lib/MT/Template/Context.pm line 780

何度再構築をかけても、こんなメッセージが出て動かなくなってしまった。新規エントリーを投稿しても同じエラーが出るし、たぶんテンプレートを再構築しても同じだろう。

うぎゃー、本当に壊してしまった・・・。

「Can’t use an undefined value as a SCALAR reference」で検索してみると、やはり対処法がいくつか出てきたんだけど、どうもみんなデータベース関係のエラーらしく、私のとは少し違うみたいだ。

at lib/MT/Template/Context.pm line 780

という部分からすると、テンプレート関係のエラーだとは思うんだけど・・・同じ状況の例が見つからない。

これはやっぱり、MTのインストールからやり直しか~?

このエントリーは

投稿クライアントの「BlogWrite」

により投稿されました。

次ページへ »

Copyright 2004-2009 abetomo, All rights reserved.
Powered by WordPress 2.6.2