タグ「tips」が付けられているもの

MT5とSQLite

  • 投稿日:
  • by
  • カテゴリ:

以前にも

MT5とMT4の動作環境の違いを調べてみました (エムロジック放課後プロジェクト)

このエントリで書きましたが、MT5ではSQLiteは対応していません。
しかし、MTをインストール時にはSQLiteも選択することができ、インストールも最後まで行うことができます。
実際に動かしてみても普通に使えるみたいなのですが、いくつか問題を発見しました。

ブログの削除ができない
ブログの一覧画面からブログを選択して「削除」ボタンを押すと「Can't call method "execute" on an undefined value」というエラーが出て削除ができません。
カスタムフィールドがうまく動かない
タグ名を「EntryDesc」としてテキストフィールドを追加したとき、<$MTEntryDesc$>タグを使っても再構築後に表示されない。これは、他の種類のフィールドでも同様で、「entrydesc」のように小文字にしないとうまく動かない

この他にも、まだ、問題はあるかもしれません。
もともとサポートしていないものなのですがから、正常に動作しなくても仕方ないと思いますが、もしかすると、同じようにエラーが起きて悩んでいる人もいるかも知れないので、ここに書いておきます。
MT5では素直にMySQLを使うのが良さそうです。

MTプラグインで、管理画面のメニューに項目を追加するには、レジストリを使います。
そこでは、「view」オプションを使って「どの画面」にメニューを追加するかを指定できます。

my $plugin = new MT::Plugin::Hoge({
    name => 'Hoge',
    registry => {
        applications => {
            cms => {
                menus => {
                    'tools:hoge' => {
                        label       => "Hoge",
                        order       => 800,
                        view        => "blog",
                    },
                },
            },
        },
    },
});

MT->add_plugin($plugin);

こんな感じで、指定するとブログメニューにだけメニューが追加できます。

と、今まではこんな感じで、blogを指定すればブログメニューに、systemを指定すればシステムメニューに、view自体を指定しなければ両方に追加されたのですが、MT5からはビューが増えたこともあり、配列を渡すことで複数のviewを追加できるようになりました。

my $plugin = new MT::Plugin::Hoge({
    name => 'Hoge',
    registry => {
        applications => {
            cms => {
                menus => {
                    'tools:hoge' => {
                        label       => "Hoge",
                        order       => 800,
                        view        => [ "blog", "website", "system"],
                    },
                },
            },
        },
    },
});

MT->add_plugin($plugin);

こんな感じにすると、ブログ、システム、ウェブサイトのメニューに新しくメニューを追加することができるようになります。
ここでは、以下の指定ができます。

user
ユーザーダッシュボード
blog
ブログメニュー
system
システムメニュー
website
ウェブサイトメニュー

この中でも、「user」が非常に面白くて、これを指定すると、本来メニューが存在しないユーザーダッシュボードに追加したメニューがひとつだけぽつんと表示されます。
まさに、「俺メニュー」という感じです。
とても、面白いので、ぜひ試してみてください。

MTのスケジュールタスク機能は、指定日投稿のほかにも公開キューによる再構築や迷惑コメント・トラックバックの削除、不要になったセッションやテンポラリファイルの削除など重要な処理を行っています(弊社でもいくつかのプラグインでスケジュールタスクを利用しています)。
MTの機能をフルに活用したいのであれば、この機能は可能な限り設定するべきです。

MTのスケジュールタスクを実行する方法として、もっとも一般的な対応はMTが動作しているサーバー上で、MTに含まれるスクリプト run-periodic-tasks を定期的に実行する方法ですが、定期的な実行を行うためには cron や Windows タスク・スケジューラ の設定が必要であり、利用するサーバーによってはこの設定を行うことができずに、スケジュールタスク機能を設定しないまま利用されている方もいらっしゃるのではないかと思います。

MTでは、サーバー上で run-periodic-tasks を実行できない場合の代替策として

指定日投稿や公開キュー等のスケジュール処理の設定 | Movable Type 4 ドキュメント
に書いてある
  • ログ・フィードの取得時に実行
  • XML-RPC API で拡張された mt.runPeriodicTasks の利用
の2通りの方法が用意されています。
どちらの方法もサーバーの設定を必要とせず外部からMTのスケジュールタスクを実行させることが可能なのですが、その設定方法については具体的に解説されていません。

このサイトでは以前Rubyスクリプトを用いた方法を紹介しましたが、今回は、Windowsに限定した、WSH(VBScript)を使った方法を紹介したいと思います。
この方法は、IEがインストールされているWindows XP/Windpows Server 2003以上の環境であれば、追加のソフトを必要としないことが特徴です。

MTプラグインは、MTシステムにインストールするとシステム単位の有効/無効は指定できますが、ブログごとの有効/無効を指定することができません(2009/07現在)。
システムに実装されていない以上プラグインで実装するしかないわけです。
毎回同じようなコードを書くわけで、いいかげんテンプレート化できてきたので、ここで、紹介しておこうと思います。

MAMPとMacGDBpでPHPスクリプトのデバッグ環境を構築する

  • 投稿日:
  • by
  • カテゴリ:

少し前に「MAMPにMTをインストールする際のメモ」という記事を書きましたが、今回はそこで書き忘れたPHPのデバッグ環境の構築について書いてみたいと思います。

MacGDBpのインストール

PHPスクリプトをリモートデバッグするには MacGDBpという、XdebugのGUIフロントエンドを使用します。ダウンロード、アーカイブ展開後、MacGDBp本体をアプリケーションフォルダにコピーするだけです。

Xdebugのインストール

次にサーバ側にXdebugエクステンションをインストールします。XdebugのバイナリパッケージがActiveStateにありますのでこれを利用します。Komodo Debugger Extensionsから"Komodo 5.1 Remote Debugging Packages"の欄にある"PHP Remote Debugging / Mac OS X"をダウンロードし、展開します。

展開するとPHPのバージョンごとにエクステンションがありますので、MAMPで使用しているPHPのバージョン(MAMP 1.7.2の場合はPHP 5.2.6)にあわせてエクステンション(xdebug.so)を選択し、以下の場所へコピーします。

$ cd 5.2
$ cp xdebug.so /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922

Xdebugの設定

Xdebugを使えるようにするには、/Applications/MAMP/conf/php5/php.iniを編集し、
以下の設定をファイルの最後へ追加します。

[xdebug]
zend_extension="/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1

また、Zend Optimizerを無効にするため、以下の行の先頭にセミコロンを入れ、コメントにします。

zend_extension_manager.optimizer=/Applications/MAMP/bin/php5/zend/lib/Optimizer-3.3.3

MacGDBpでスクリプトをデバッグする

MacGDBpを起動すると、デバッガ画面が開きます。この状態で、デバッグしたいページをブラウザからアクセスすると、ブラウザ上には何も表示されませんが、MacGDBpでは次のような画面になり、スクリプトの先頭で停止します。

macgdbp_debugger.jpg

画面上部左側では、変数の内容を確認できます。

スクリプトを任意の場所で停止したい場合は、Breakpointsウィンドウを開き、画面下部の「+」をクリックしてスクリプトを指定し、画面上部に表示されたスクリプトから停止させたい箇所の行番号部分をクリックします。

macgdbp_break.jpg

これでPHPスクリプトのデバッグが出来るようになり、ダイナミックパブリッシングに対応したMTプラグインの開発効率が上がるはず(?)です。

MAMPにMTをインストールする際のメモ

  • 投稿日:
  • by
  • カテゴリ:

MT関連の開発にはMAMPに複数のバージョンのMTを同時にインストールして使っていますが、毎回新しいバージョンを入れる度にやり方をすっかり忘れているので、次にインストールする時のためにここにメモしておきます。

  1. MTのアーカイブを展開後、"mt425"等バージョン番号をつけたディレクトリ名にrenameし、DocumentRootへコピーする。
  2. 以下の内容でmt-config.cgiを作成する。
    CGIPath        /mt425/
    StaticWebPath  /mt425/mt-static/
    StaticFilePath /Applications/MAMP/htdocs/mt425/mt-static
    
    ObjectDriver DBI::mysql
    Database mt425
    DBUser root
    DBPassword xxxx
    DBHost localhost
    DBSocket /Applications/MAMP/tmp/mysql/mysql.sock
    
    MailTransfer sendmail
    SendMailPath /usr/sbin/sendmail
    
    MySQLのSoketファイルは/Applications/MAMP/tmp/mysql/mysql.sockにある。mt-config.cgiのDBSocketにはこれを設定する。
  3. バージョン毎のディレクトリ以下で直接cgiが動くよう、DocumentRootに以下の内容の.htaccessが存在するか確認し、なければ作成する。
    Options +ExecCGI
    AddHandler cgi-script .cgi
    
  4. mt-config.cgiで指定したデータベースを作成する。mysql/mysqladminは/Applications/MAMP/Library/binにある。
    > mysqladmin -u root -p create mt425 --default-character-set=utf8
    
  5. mt.cfgにアクセスする。

MAMPを起動しても、Apache/MySQLサーバの状態が「赤」になり、起動しないことがたまにあります。そういう場合は、/Applications/MAMP/bin/apache2/logs/httpd.pidが存在するならそれを削除してみます。MySQLで同様の場合は、/Applications/MAMP/tmp/mysql/mysql.pidを削除してみます。

MTのDBをSQLiteからMySQLへ

  • 投稿日:
  • by
  • カテゴリ:

MTが動いているサーバを移転することになりました。
しかし、

  • 旧サーバはSQLiteしか使えない
  • 新サーバはMySQLしか使えない

ということで、SQLiteのファイルをそのまま移動して終わりと言うわけにはいきません。
どこかで、新サーバのMySQLにデータを移行するために変換を行う必要があります。
そこで、こんな方法を考えてみました。

  1. 旧サーバのSQLiteのデータベースファイルをローカルPCにバックアップする
  2. ローカル環境に構築したサーバに旧サーバのMTと同じバージョンのMTをインストールしておく
  3. バックアップしたSQLiteのバックアップファイルをローカル環境のMTで使えるようにMT側の設定を行い、ファイルを所定のディレクトリにおく
  4. ogawaさんの「MT Database Converter 」を使い、MySQLにコンバート
  5. MySQLのデータベースをdumpする
  6. dumpしたデータを新サーバのMySQLにインポートする

これで、うまくいくはずなんですが、はまったのが

旧サーバとローカルサーバのDBD::SQLiteのバージョンを揃える必要がある

という点でした。
今回は、旧サーバのバージョンにあわせてモジュールをインストールしました。

この手の作業は、仕事で時々発生することがあると思うので、ここにメモしておきます。