Tag Archives: Movable Type

MT->WP Log. (WordPress引っ越し記録)

 先日、MovableTypeからWordPressに移行したので作業記録を残す。

 このエントリは移行時の作業メモであり、MovableTypeからWordpressへの移行作業を1から10まで書いていない。
 また、本ブログで重要とされてる事柄(主にパーマネントリンク)に対して、本ブログなりの対策を行っているため、全ての方の参考にはならないかもしれない。
 つまり『移行ガイド』ではないのでそのつもりで。

 環境は以下のとおり。

  • OS:CentOS
  • PHP:5.1.6-24
  • MySQL:5.0.77
  • MovableType:4.27-ja (以降 MT )
  • WordPress:2.9.2-ja (以降 WP )

■パーマネントリンクの解決
 最大の課題。
 完全に移行(MTエントリのURLでWPのエントリにリンクさせる)するか、それとも潔くMTのパーマネントリンクは捨てるか。
 本ブログは移行時点で約400のエントリを持っていて、どちらかと言えばエントリの少ないブログに区分されると思う。
 しかし、ありがたくもソーシャルブックマークされているものや、中には検索エンジンの上位に検出されるエントリも存在するため、それらを完全に無視するのも申し訳ない。
 かと言って、MTでのURLをWPにマッピングして将来的にもMTのならわしでWPを運用し続けていくのも気に食わない。

 結論として、外部サイトからリンクを張られた(リンク切れが発生する)エントリに関しては、apacheのmod_rewriteによりWPにマッピングし、他のエントリに関してはMTのURLを捨てる事とした。
 今後のパーマネントリンクはWPの形式に準ずる事にする。

■mod_rewriteの実験
 実現したい事は、MTのURLでアクセスしても、移行後のWPエントリが表示される事。
 mod_rewriteは正規表現を用いる事ができる等、自由度高く動作指定できるのだけど、期待する動作は1:1の紐付けと、古いURLでアクセスした際に301を返却させる事である。

 全ての設定(RewriteRule)をWPの.htaccessファイルに記述すれば実現するが、httpd.confに記述した方が動作が速くなるそうなのでそうする。
 実験的にWPインストール&MTからのインポートを行い、ちゃんとrewriteされるか色々と試したところ、最初はうまくいかなかった。以下の理由で。

  • rewrite設定を記述しても、アクセスしたファイル(つまりrewrite元のファイル)が存在する場合にはrewriteしない。
  • 該当フォルダに.htaccessファイルが存在し、rewriteの記述が存在する場合にはOverwriteされてしまい(本当?)、httpd.confの記述が有効とならない。

 この事から、前者については移行後は該当しないので問題ないが、後者についてはWPが元々持っている.htaccessファイルが存在する(パーマネントリンクの設定をdefault以外にした場合)ため対策しなくてはならない。
 対策は、WPの.htaccessファイルの内容をhttpd.confに移動させ、.htaccessの中身は無効化(記述削除でもいい)する。
 ちなみに、WPの(.htaccessに自動生成された)rewrite設定は、今回のrewriteマッピング設定よりも後ろに記述する事。そうしないと、全てのアクセスがWPのindex.phpにrewriteされてしまう。不安であれば移行前に色々と実験した方が良い。

 なお、.htaccessの中身をコメントアウトないしファイルそのものを削除して.htaccessの中身を無効としても、後でWPの管理画面よりパーマリンクの設定を更新すると、.htaccessの内容は復活してしまう。
 これにより、いつのまにかmod_rewriteで設定した内容が無効になってしまうので、パーマリンクの設定は以後行わないようにするか、.htaccessをapacheが更新できないよう、ファイルそのもののパーミッションを変更しておく必要がある。これはハマった。

 それでは実際の移行作業に移ろう。

■DataBaseの作成
 以下の説明では、MySQLのユーザ名をUSER_NAME、パスワードをPASSWD、WPで用いるデータベース名をDATABASE_NAMEとしている。

[cc lang=”bash”]
$ mysql -uUSER_NAME -p
Enter password:PASSWD
:
mysql> create database DATABASE_NAME
[/cc]

■Wordpressの準備
 WPのアーカイブをサーバ上で展開。

[cc lang=”bash”]
$ unzip wordpress-2.9.2-ja.zip
Archive: wordpress-2.9.2-ja.zip
creating: wordpress/
creating: wordpress/wp-includes/
:
[/cc]

 apacheに書き込み権限を与える。
 なお、私のアカウントはapacheグループに所属しているため、一般ユーザでchgrp apacheが可能となっている。できなければrootで実施する事。

[cc lang=”bash”]
$ chgrp apache ./wordpress/
$ chgrp apache ./wordpress/wp-content
$ chmod g+w ./wordpress/
$ chmod g+w ./wordpress/wp-content
[/cc]

 なお、MTとWPを同一フォルダに共存させるため、WPの方はとりあえず「wp_blog」というフォルダ名としておく。
 以上、ディレクトリに適切な権限が付与されていれば、あとはブラウザから設定する事ができる。
 ブラウザから、データベース名等設定する。セキュリティ上不安であればSSL(https://)で接続する。
 面倒ならsshで接続して直にconfigファイルを編集したり、ローカルで編集したconfigファイルをFTPでアップロードしても良い(WordPress自体がこの方法を推奨している)。

 設定が完了すればadminというユーザが生成され、ブラウザに初期パスワードが表示される。これをメモしておく。

 ログインボタンを押下する。
 アカウントをadminとし、パスワードは先ほどメモしたものを入力する。

 WPのダッシュボードが表示される。

 まずは新規アカウントの生成(adminを使い続けても良いのだが気持ちが悪い)。
 管理者権限を与える。

 adminをログアウトし、新たに生成したアカウントでログイン。
 adminをコンテンツごと削除する(『すべての投稿とリンクを削除』を選択)。

 これで何もない(まっさらな)WPができあがる。

■WPへのインポート
 MTからエクスポートしたファイルをインポートする。
 当ブログは、エントリ数が少ないのでエクスポートファイルが2MB以内に収まったが、2MBを超える場合には、
 ファイル名をmt-export.txtとし、/wp-content/に格納してからブラウザを操作する。
 要するにインポートページに書いてあるようにする。

■投稿者の割り当て
 インポートするエントリの投稿者をWPのユーザに割り当てる。先ほど生成したユーザ(つまり今ログインしている
唯一のユーザ)に割り当てる。

■パーマリンクの設定
[設定]→[パーマリンク設定]

 『カスタム構造』を選択し、以下を指定した。

/%year%/%monthnum%/%post_id%

■Rewriteの設定
 いよいよ。

■Movabletypeからデータのエクスポート
 メニュー:[ツール]→[エクスポート]で、『ブログをエクスポート』ボタンを押下。
 画像などのバイナリデータは含まれていないので、MTの環境はまだ捨ててはならない。

■外部サイトからのリンク抽出
 この作業はGoogleのウェブマスター ツールが適している。

Google ウェブマスター ツール

 ダッシュボードの『サイトへのリンク』から詳細ページに遷移すると、リンク情報をcsv形式のファイルでダウンロードする事ができる。
 ブログへのリンクのみを抽出するために以下スクリプトを書いた。

[cc lang=”PHP”]
$val ) {
echo $key.”\n”;
}
}
[/cc]

 もしも、あなたがこのスクリプトを利用する場合には、strstrの引数を修正する必要がある。

 スクリプトは以下のように用いる。Gg_BlogLink.txtに抽出されたURLが記録される。

[cc lang=”bash”]
$ php BlogLinkExtract.php ダウンロードしたCSVファイル名 > Gg_BlogLink.txt
[/cc]

■WordPressのURLとエントリタイトルの取得
 MTからインポートしたエントリをエクスポートする(WPでのURLが欲しいので)。

 以下のスクリプトを書いた。このスクリプトを実行すると、WPのURLとそれぞれのエントリタイトルが得られる。

[cc lang=”PHP”]
channel->item as $value ) {
echo sprintf(“%s,%s\n”, $value->link, $value->title);
}
}
[/cc]

 このように使う。結果はWP_BlogLink.txtに書き出される。

[cc lang=”bash”]
$ php WPExportXMLExtract.php WPからエクスポートしたファイル名 > WP_BlogLink.txt
[/cc]

■MovabletypeのURLとエントリタイトルの取得
 ブログのアーカイブページを表示させページソースからURLとエントリタイトルを手動でファイルに保存する(MT_BlogLink.txt)。ここ、いきなり原始的になるが、手っ取り早いのでこうした。
 残すファイルの内容は、URLとエントリタイトルをカンマ区切りにして1行に1エントリとする。
 要するに、上記で抽出したWPの抽出内容と同じ形式にする。なお、ファイル保存時の文字エンコーディングは忘れずにUTF-8としておくこと。

■RewriteRuleの自動生成
 これまでに準備した3つのファイル( Gg_BlogLink.txt, WP_BlogLink.txt, MT_BlogLink.txt)を元に、以下スクリプトでRewriteRuleを自動生成する。

[cc lang=”PHP”]
$w_title ) {
if ( $m_title == $w_title ) {
echo sprintf( “RewriteRule %s %s [R=301,L]\n”, str_replace( $blog_url, ”, $g_url),
str_replace( array($domain,’wp_blog’), array(”,’blog’), $w_url ) );
break;
}
}
}
[/cc]

 こんな感じで実行すると、httpd.confに記載すべきRewriteRuleが吐かれます。

[cc lang=”bash”]
$ php CreateRewriteRule.php > RewriteRule.txt
[/cc]

 httpd.confを更新してapacheを再起動。

■ブログのフォルダを入れ替える(rename)。

  • MTのフォルダ:blog
  • WPのフォルダ:wp_blog

という状況なので以下の手順で入れ替える。

 WPの設定画面([設定]→[一般])で、アドレスを変更する。

設定前)
WordPress のアドレス (URL) http://www.ivoryworks.com/wp_blog
ブログのアドレス (URL) http://www.ivoryworks.com/wp_blog

設定後)
WordPress のアドレス (URL) http://www.ivoryworks.com/blog
ブログのアドレス (URL) http://www.ivoryworks.com/blog

 アドレスを変更した事により、『変更を保存』ボタンを押下すると元のページに戻れなくなるが問題ない。

 次に、MTのフォルダをrenameする。例えば『blog』→『mt_blog』というように。

 最後に、WPのフォルダ名をrenameする。『wp_blog』→『blog』

 おしまい。

MT->WP以降に伴う各種Feed URLの変更

Movable Typeでの下記Feed URLは現状も用いる事が出来ますが、可能ならWordpressのURLを用いて下さるようお願いします。
旧)但し現在でも利用可能です
  • http://www.ivoryworks.com/blog/rss.xml
  • http://www.ivoryworks.com/blog/atom.xml
新)
  • http://www.ivoryworks.com/blog/feed/
他にもカテゴリ別等のFeedがありますのでご利用ください。

 

* WordPressのエディタ、まだ使いこなせていない。プラグイン入れているのに空改行が・・・。文頭の全角スペースも消えるし。

 

おれはMTをやめるぞ! ジョジョーーっ!!

というわけで、Movable TypeからWordpressに鞍替えしました。超越しました。

過去のリンクはmod_rewriteで対応しているのでソーシャルブックマーク等からのリンク切れはないと思います。

引っ越し記は後で書きます。

Movable Typeの復元がもうだめ

Weblog(Movable Type 4系)のデザインカスタマイズしようと思い、とりあえずローカルに環境作って、バックアップデータ持ってきて・・・、とやってみたら復元できない。

バックアップはMovable Typeのバックアップ機能(エクスポートでなくてね)を使用。
サーバとクライアントのMovable Typeもバージョンを合わせて(公開サーバのバージョンが最新より1つ古かったので、サーバの方を合わせた)、いざバックアップ。
ダウンロードしたバックアップデータを、クライアントのimportディレクトリに展開して、復元。
処理中のゲージアニメーションが表示されて、『復元を開始』と出力されるのだけど、それ以降何も出力されない。DB(MySQL)のテーブル除いても空だし、apacheのログにも特になにも出力はなし。
色々調べて、『プラグインによって、テーブルにフィールドが追加された場合は復元うまくいかないよ』というので、スクリプト書いて、サーバとクライアントのテーブル全てのフィールドを吐き出してdiffとってみても同じ。
情報がなさすぎて打つ手がない。
仕方ないので、DBをダンプした。
$ mysqldump -a –user=USERNAME –password=PASSWORD DBNAME > Backup.mysql
クライアントにダウンロードして復元。
$ mysql –user=USERNAME –password=PASSWORD DBNAME < Backup.mysql
正常に展開された。ただ、ここまは良かったのだけど、今度はコンテンツの再構築でエラーとなる。理由はパスの不一致(ダンプデータの中にパス情報が記録されているため)。
サーバ側はCentOS、クライアントがFedoraなんだけど、apacheのDocumentRootがデフォルトで異なる。
CentOS:/var/www/htdocs
Fedora:/var/www/html
仕方なくパスを合わせて、再構築。
OK。
バックアップファイルからの復元がうまくいかなかったのは、パスの不一致かもしれないと思い、DBを全てクリアして初期化、再びMovable Typeの復元機能で挑戦。
うまくいかない。
MySQLのダンプでうまく行っているので、当初の目的は果たせるのだけど、MySQLダンプの場合は、画像等のデータも別途バックアップする必要があり、できればMovable Typeのバックアップ機能を用いたいところ。
まいったね。

MailPackがうまく機能していない

 先日、サーバの日時が未来に(それもかなり派手に)設定されていたため各所で弊害が発生している。

 MovableType(MT)プラグインのMailPackだが、MailBoxへpostしてもメールを取得しにいかなくなっている。cronの設定は変更していないので、MTのシステム的な問題と思われる。
 根拠として、MTの管理画面に表示されるエントリタイムラインの「今日」の位置が、3日後の10月8日なっているためである。
 先日、エントリした際に投稿日付が10月8日になっている事で誤りに気づき、慌ててサーバの日付変更と、エントリ自身の投稿日時を過去(つまり現在)に戻した(順は逆だったかも)。
 表面上正しく見えるが、タイムラインの「今日」はその時から変化する事なく10月8日を指したままなので、どこかのテーブルに誤った日付が残ってしまっていると考えている。
 予想が合っていれば、MailBoxに到着しているエントリは、3日後に解放されるのだろう。

エイリアスだめですか?『MailPackプラグイン』

 先日導入して便利に使ってるMailPackプラグイン。
 これでVamp Recordsもmoblogできるようになった。
 以下はMailPackの設定画面(この画面で、投稿先ブログを設定すると、そのブログのカテゴリチェックボックスが現われる)。
mailpack_config.jpg
 MailPackの仕組みは、moblog専用のメールBOXにメールでエントリを放り込んでおくと、un-periodic-tasksの実行(cron)に合わせて、メールBOXからメールを取り出し、あらかじめ設定しておいた定義に合致したメールのみをエントリとして投稿するというもの。
で、設定項目に、「投稿先のメールアドレス」とあるので、てっきり「カテゴリ」紐付けされるものだと思い、カテゴリ別にaliase切っておけば、あて先使い分けることでカテゴリ別投稿ができるなと思っていたけど違った。
 MailPackは複数の「投稿先のメールアドレス」を設定できるが、同一のメールBOXを登録することはできないようだ。
 つまり、「投稿先のメールアドレス」につきメールBOXは1つ。という紐付け。
 であるから、例えばmoblogというアカウントのメールBOXをMailPack用に用意して、Linuxカテゴリ用にlinux、プログラミングカテゴリ用にprogramingというmoblogアカウントのaliaseを準備したとしても、使い分けることができない(設定できない)。
 カテゴリ別にアカウントを切る(メールBOXを準備する)のが面倒というか、ちょっと格好悪いのでこの思惑は諦めた。
 結局、moblogカテゴリを新設し、そこに放り込むことにしている。

メールエントリテスト『MailPackプラグイン』

 このエントリが正しく投稿されていれば、MailPackによるMovable TypeへのMail G
atewayは正しく動作している事になる。タグ付けができない不自由はあるが、重宝す
るのは間違いない。

 MailPackプラグインは、受信したエントリメールのFromアドレスと、MTに登録され
ているユーザのアドレスを照合し、一致すればブログ記事に反映するという仕組みを
持っている。これは当然の防御策である。

 ただ、自分の場合は携帯電話からのメール投稿が主な用途になるので、この仕様を
素直に受け止めるなら、MTに登録したメールアドレスを携帯電話のメールアドレスに
変更しなければならない。

 これは嫌だ。メールを受信したらFromを差し替えるなどの仕組みを作るしかない。
メールサーバは自前なので、このあたりの自由は効く。

 メールエントリの反映は、run-periodic-tasksの実行がトリガとなる。本ブログで
は、30分おきにcronで実行している。

 cronの設定とは別に、メールエントリが到着したらrun-periodic-tasksが実行され
るようにすれば、携帯からの投稿のみリアルタイムで反映させることができるはずだ。

メールでMovableTypeにエントリ『MailPack』

 以前、携帯電話からMovable Typeへ投稿する方法を模索(特にgatewayサービスでないもの)していて、結局良いのがなくて諦めていたのだけど、新しい選択肢を発見した。

Movable Typeで簡単携帯投稿!メール投稿プラグイン:MailPack

http://www.skyarc.co.jp/engineerblog/entry/4022.html
 ただ、設置後の設定がうまくいかない(設定というか、スクリプトを正常動作させるのに手間取っている)。
 うまくいけば、エントリバリエーションが増えるのだけれども。

Movable Typeページ分割実施『MTPaginate』

 アーカイブページのページ分割をやっと行った。
 環境は、Movable Type Pro version 4.25。

MTPaginate
http://www.nonplus.net/software/mt/MTPaginate.htm
 小粋空間を参考にさせてもらい、適用。
 何ら難しい事はなかった。
 PHP化はweblog設置当初に済ませていたのでなおさら。
小粋空間: アーカイブページのページ分割 for Movable Type 4.1
http://www.koikikukan.com/archives/2008/04/10-000313.php
イイネ。

Movable Type 4.21 -> 4.25

 日常生活に余裕が出てきたので、Movable Typeをやっとアップグレード。
と、同時に小粋空間で解説されているプラグインディレクトリの切り分け作業を行う。
Movable Type のアップグレードで旧アプリケーションディレクトリのプラグインを新アプリケーションディレクトリにコピーしない方法
http://www.koikikukan.com/archives/2008/12/15-012345.php
で、アップグレード。
念のためrebuildして、問題ないこと確認。
 あとは以下不具合について気になるところ。
Movable Type 4.25 における MTEntires タグの category モディファイアの不具合について
http://www.koikikukan.com/archives/2009/04/28-001703.php
 ウチは現状該当しないんだけどさ。