ようこそゲストさん

Digiclo Online Memo

メッセージ欄

分類 【MovableType】 で検索

一覧で表示する

MovableTypeでログイン異常時の対処

はてブ情報 はてブに登録 はてブ数 2009/10/27 19:28 MovableTypeDigiclo
日頃お世話になってるNORIさんがMTでページ遷移の度にログインを求められるトラブルに遭遇していたそうなので、対処方をちょっっと調べた結果のまとめ
MTが壊れてました。
具体的には、mt_sessionテーブル。

現象としては、ブラウザ、マシンを問わず、まるでクッキーが機能していないようにログイン要求画面が操作するたびに毎回でます。
Hello World
検索の結果、下記エントリーを発見。対処方を行ってNORIさんのトラブルは無事解決
ブログのテンプレートを少し触ろうと、MTにログインして作業をしようとすると、管理画面のページを移動する度に、ログイン画面に飛ばされる現象に急に襲われました。
BULANCO BLOG
最悪、コピー元が無い場合はSQL文にて

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

DROP TABLE IF EXISTS `mt_session`;
CREATE TABLE IF NOT EXISTS `mt_session` (
  `session_id` varchar(80) NOT NULL,
  `session_data` mediumblob,
  `session_email` varchar(255) DEFAULT NULL,
  `session_kind` varchar(2) DEFAULT NULL,
  `session_name` varchar(255) DEFAULT NULL,
  `session_start` int(11) NOT NULL,
  PRIMARY KEY (`session_id`),
  KEY `mt_session_kind` (`session_kind`),
  KEY `mt_session_name` (`session_name`),
  KEY `mt_session_start` (`session_start`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

を放り込めば多分、直ると思われる。
なお、このテーブルはMovableType4.2系の物である。

同様に破損しやすいテーブルにmt_tbpingもあるようなのでこちらも空のテーブル作成用のSQLを

DROP TABLE IF EXISTS `mt_tbping`;
CREATE TABLE IF NOT EXISTS `mt_tbping` (
  `tbping_id` int(11) NOT NULL AUTO_INCREMENT,
  `tbping_blog_id` int(11) NOT NULL,
  `tbping_blog_name` varchar(255) DEFAULT NULL,
  `tbping_created_by` int(11) DEFAULT NULL,
  `tbping_created_on` datetime DEFAULT NULL,
  `tbping_excerpt` mediumtext,
  `tbping_ip` varchar(15) NOT NULL,
  `tbping_junk_log` mediumtext,
  `tbping_junk_score` float DEFAULT NULL,
  `tbping_junk_status` smallint(6) NOT NULL DEFAULT '1',
  `tbping_last_moved_on` datetime NOT NULL DEFAULT '2000-01-01 00:00:00',
  `tbping_modified_by` int(11) DEFAULT NULL,
  `tbping_modified_on` datetime DEFAULT NULL,
  `tbping_source_url` varchar(255) DEFAULT NULL,
  `tbping_tb_id` int(11) NOT NULL,
  `tbping_title` varchar(255) DEFAULT NULL,
  `tbping_visible` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`tbping_id`),
  KEY `mt_tbping_blog_stat` (`tbping_blog_id`,`tbping_junk_status`,`tbping_created_on`),
  KEY `mt_tbping_ip` (`tbping_ip`),
  KEY `mt_tbping_visible_date` (`tbping_visible`,`tbping_created_on`),
  KEY `mt_tbping_last_moved_on` (`tbping_last_moved_on`),
  KEY `mt_tbping_blog_visible` (`tbping_blog_id`,`tbping_visible`,`tbping_created_on`,`tbping_id`),
  KEY `mt_tbping_tb_visible` (`tbping_tb_id`,`tbping_visible`,`tbping_created_on`),
  KEY `mt_tbping_created_on` (`tbping_created_on`),
  KEY `mt_tbping_junk_date` (`tbping_junk_status`,`tbping_created_on`),
  KEY `mt_tbping_blog_url` (`tbping_blog_id`,`tbping_visible`,`tbping_source_url`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;

Movable Typeの再構築を僅かでも高速化する手順

はてブ情報 はてブに登録 はてブ数 2009/10/05 8:25 MovableTypeDigiclo
現在利用している共有レンタルサーバのうち、MySQLでストレージエンジンにInnoDBが利用可能なものがあったので実証実験としてMyISAM から InnoDBへと変更。
というわけで、次の作業は「ストレージエンジンをMyISAMからInnoDBに変更する」を実施して計測します。シックス・アパートのエンジニアが以前試験したところ、MyISAMよりもInnoDBの方がパフォーマンスがいいという結果を聞いていたので、ワクワクしながら、次のコマンドを実行してInnoDBに変更していきます。
techknow.yagishita.net - MTを使ったサイト構築テクニック (2): ネタフルにおける再構築チューニング
ということと
phpMyAdmin で MySQL のストレージエンジンを MyISAM から InnoDB に変更する具体的な方法です。ここでは XAMPP 環境(Windows XP + MySQL 5.0 + phpMyAdmin 2.11.4)で試したもので紹介します。
phpMyAdmin で MySQL のストレージエンジンを MyISAM から InnoDB に変更する方法
とxampp上での実証は小粋空間の荒木さんに先を越されたので
共有のレンタルサーバではどうなのかと言うことで人柱になってみた。
  • coreserverの管理画面より、データベースを選択し、該当のMTのDBへphpMyAdminで接続する。*1
  • 該当DBを選択し、SQLメニューより以下のコマンドをコピーし貼り付けて実行
ALTER TABLE `mt_asset`  ENGINE = 'InnoDB';
ALTER TABLE `mt_asset_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_association`  ENGINE = InnoDB;
ALTER TABLE `mt_as_ua_cache`  ENGINE = InnoDB;
ALTER TABLE `mt_author`  ENGINE = InnoDB;
ALTER TABLE `mt_author_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_backgroundrebuild`  ENGINE = InnoDB;
ALTER TABLE `mt_blog`  ENGINE = InnoDB;
ALTER TABLE `mt_blog_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_category`  ENGINE = InnoDB;
ALTER TABLE `mt_category_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_comment`  ENGINE = InnoDB;
ALTER TABLE `mt_comment_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_config`  ENGINE = InnoDB;
ALTER TABLE `mt_entry`  ENGINE = InnoDB;
ALTER TABLE `mt_entry_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_field`  ENGINE = InnoDB;
ALTER TABLE `mt_fileinfo`  ENGINE = InnoDB;
ALTER TABLE `mt_ipbanlist`  ENGINE = InnoDB;
ALTER TABLE `mt_log`  ENGINE = InnoDB;
ALTER TABLE `mt_notification`  ENGINE = InnoDB;
ALTER TABLE `mt_objectasset`  ENGINE = InnoDB;
ALTER TABLE `mt_objectscore`  ENGINE = InnoDB;
ALTER TABLE `mt_objecttag`  ENGINE = InnoDB;
ALTER TABLE `mt_permission`  ENGINE = InnoDB;
ALTER TABLE `mt_placement`  ENGINE = InnoDB;
ALTER TABLE `mt_plugindata`  ENGINE = InnoDB;
ALTER TABLE `mt_profileevent`  ENGINE = InnoDB;
ALTER TABLE `mt_profileevent_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_role`  ENGINE = InnoDB;
ALTER TABLE `mt_session`  ENGINE = InnoDB;
ALTER TABLE `mt_tag`  ENGINE = InnoDB;
ALTER TABLE `mt_tbping`  ENGINE = InnoDB;
ALTER TABLE `mt_tbping_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_template`  ENGINE = InnoDB;
ALTER TABLE `mt_templatemap`  ENGINE = InnoDB;
ALTER TABLE `mt_template_meta`  ENGINE = InnoDB;
ALTER TABLE `mt_touch`  ENGINE = InnoDB;
ALTER TABLE `mt_trackback`  ENGINE = InnoDB;
ALTER TABLE `mt_ts_error`  ENGINE = InnoDB;
ALTER TABLE `mt_ts_exitstatus`  ENGINE = InnoDB;
ALTER TABLE `mt_ts_funcmap`  ENGINE = InnoDB;
ALTER TABLE `mt_ts_job`  ENGINE = InnoDB;

*2

以上でストレージエンジンの変更は完了

あらかじめ、バックアップを取ってあったMyISAMのもので別に設置したMTOSと2個を用い、同時に全面再構築を10回ずつ行ってみた。
エントリー数は適当にいくつかの自ブログからインポートしたもので100件ほど。

MyISAMに対して、InnoDBの方は最大で約20%程度速度が向上していた。*3

ストレージエンジンが選択可能であれば若干ながら有効である事を実証できた。
サーバのマシンパワーが潤沢であり、MTのパブリッシングに占有可能であるならば、my.cnfへのパラメータ設定によるチューニング込みで大量のページを処理する場合には採用を検討したい。

*1 : ホスト登録をしてsshにてコマンドライン作業でも可

*2 : 必ずしも改行する必要は無い

*3 : さすがにmy.cnfなどは触れないし、マシンパワー依存のInnoDBでは共有サーバでは他の人の迷惑になるので速攻削除した

2007/03/02(金) Ajaxによる高速サーチの導入

はてブ情報 はてブに登録 はてブ数 2007/03/02 19:43 MovableTypeDigiclo

参考サイト
風柳亭 - 別館:書庫のある庵 -:blog_ajax_json_search.jsにパッチ:コメントも含めて検索
暴想:ココログプロとかTypepadとかMTとかブログ人とかその他のブログサービスとかでもAjaxでバックナンバーを検索するJavaScript

●以下をまず入手(prototype.jsはともかく、blog_ajax_json_search.jsはDigicloにより改変されています)

prototype.js

blog_ajax_json_search.js

●検索用データを抽出するテンプレートを作成

インデックステンプレートとして新規に検索データ抽出を作成、出力ファイル名はsearch_data.txtとして以下の内容で作成。インデックステンプレートに連動して再構築をする設定とすること。

 <?xml version="1.0" encoding="utf8"?>
{
data:[
<MTEntries all="1">{
title:"<$MTEntryTitle remove_html="1" encode_js="1"$>"
,link:"<$MTEntryLink$>"
,body:"<$MTEntryBody remove_html="1" encode_js="1"$><$MTEntryMore remove_html="1" encode_js="1"$><MTComments>【<$MTCommentAuthor remove_html="1" encode_js="1"$>】<$MTCommentBody remove_html="1" encode_js="1"$></MTComments>"
},</MTEntries>
{title:"",link:"",body:""}
]
}

●呼び出し用検索窓作成

<script type="text/javascript" src="<$MTBlogURL$>prototype.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>blog_ajax_json_search.js"></script>
<form action="javascript:blogAjaxJsonSearch( '<$MTBlogURL$>search_data.txt', document.getElementById('search_box').value );">
<input type="text" id="search_box" value="" />
<input type="button" id="search_button" onclick="javascript:blogAjaxJsonSearch( '<$MTBlogURL$>search_data.txt', document.getElementById('search_box').value );" onkeypress="javascript:blogAjaxJsonSearch( '<$MTBlogURL$>search_data.txt', document.getElementById('search_box').value );" value="検索" />
</form>

●表示領域の作成
各テンプレートの任意の表示したい位置を<div class="result"></div>で囲む。

サイトを再構築することで利用可能となる。

注意点

エントリーを追加した後、search_data.txtを再構築しなければ検索に反映しないので注意。

2007/02/27(火) Movable Type Ver3.2系から3.3系へのアップグレード

はてブ情報 はてブに登録 はてブ数 2007/02/27 14:45 MovableTypeDigiclo

 3.2系ではカテゴリー名が日本語の場合、cat+カテゴリーIDが自動でカテゴリーファイルパスとなるが、3.3系では任意にファイル名という形でカテゴリーファイルパスが作成出来る。また任意に指定しない場合、日本語のカテゴリー名から2バイト文字を除いたカテゴリーファイルパスが作成されてしまう。

その為、3.2でアーカイブマッピングのエントリーアーカイブを

primary_category/entry_basename.html

としていた場合にアップグレード後、パーマリンクが異なって構成されてしまう。

回避策として

1)アップグレード後、再構築前にカテゴリー一覧よりファイル名を旧来のcat+IDとして全て修正を施す。 

2)アーカイブマッピングのエントリーアーカイブを既存の物ではなく"カスタマイズ"を選択し、

MTCategoryBasename>/<MTArchiveFile extension='0'>.html

とする

3)上記が完了した段階で再構築を行う

なお、誤って回避策を実行前に再構築をしてしまった場合、スタティック作成にしているとサーバ上に誤ったURIでのファイルが散乱することになるので要注意

2006/10/12(木) xrea.comにMovable Type 3.33-ja

はてブ情報 はてブに登録 はてブ数 2006/10/12 6:41 MovableTypeDigiclo

XREAにて、Movable Type 3.33-jaを導入する場合の注意点

  • XREAのユーザ名に"-"が含まれるとMySQLが使えないので申し込みの際に注意すること。 
  • mt-check.cgi単体では動かない。
  • Movable Type 3.33-jaの全ファイルをアップロードしておく必要あり。
  • mt-config.cgiが無い場合、mt-check.cgiもmt-wizard.cgiも正常に動作しない。
  • MySQLのエンコードはEUC-JPを強く推奨。
  • cgiのパーミッションは全て700。755ではないので注意。
  • StyleCatcher用のthemesや画像のアップロード等のディレクトリのパーミッションを707にする必要あり。777ではない。
  • mt-config.cgiが必須。
  • ◆広告自動挿入対策が必要。public_html直下にインストールすると広告の自動挿入が行われる。よって、広告回避用のxディレクトリを作成しておき、そこへMovable Type 3.33-ja.zipを解凍してアップロードする。
  • コントロールパネルからMySQLでDBを作成しておく。
  • mt-check.cgiの実行前に初期設定が必要。

mt-config.cgiを以下の内容で作成しておく。

CGIPath http://ユーザ名.サーバ番号.xrea.com/x/

ObjectDriver DBI::mysql
Database ユーザ名
DBUser ユーザ名
DBPassword パスワード
DBHost localhost

Apacheがsuexecで稼働する為マスクを設定

DBUmask 0022
HTMLUmask 0022
UploadUmask 0022
DirUmask 0022

文字コードを設定

PublishCharset EUC-JP


上記内容でmt-config.cgiを作成したら、パーミッションを604にしておく。 
  • mt-check.cgiで動作を確認(しなくてもOK)。そこいらのレンタルサーバよりもインストール済みのモジュールは充実してます。
  • 以下へのアクセスによりインストール開始。

http://ユーザ名.サーバ番号.xrea.com/x/index.html

  • 初期設定を実施し、再構築を行う。ダイナミックパブリッシングを行う場合、自動生成されるtemplates_cのパーミッションを707にしておく。
  • 再構築後に表示を確認し、正常ならインストールは成功。
  • 広告の手動挿入処理。XREAのコントロールパネルの広告HTMLより広告挿入用のJavaScriptをコピーし、インデックステンプレートのメインページ、アーカイブページ、アーカイブテンプレートの全て、システムテンプレートの検索結果の</body>の直前に追加。

この場合、モジュールテンプレートに新規として"xrea-ad"を作成し、その中にJavaScriptをコピー。各テンプレートの</body>の直前に

<$MTInclude module="xrea-ad"$>

といった形で設置し再構築すると手間が掛からない。

2006/05/11(木) RightFieldsでDBのテーブルを利用する際の作業手順

はてブ情報 はてブに登録 はてブ数 2006/05/11 20:52 MovableTypeDigiclo

◆DB上のテーブルを設計する。

  • フィールドの先頭にDB名_idをindexとし、intで作成する事を忘れない。
  • 各フィールドはDB名_フィールド名とし、varcharで桁数は各フィールドに格納される内容の最大バイト数に準拠させる。
  • フィールドの桁数を越えるデータは入力出来ないので注意。
  • Link、FileなどはそれぞれURLやファイル名が格納されるので注意。
  • リストボックスの場合、全ての要素が格納されるので桁数に注意。
  • index用が入る為、フィールド数は必要なフィールド数+1となる。

◆MySQLのDBにテーブルを作成する。

  • mt_DB名としてテーブルを新規に作成し、設計に従って全フィールドを登録する。

◆RightFieldsの設定を行う

  • Extra Fields タブのData Storage for Extra FieldsからStore data in:を選択
  • データ格納先をCustom SQL database table として選ぶ.

スクリーンショット

◆SQLテーブル名を入力

  • SQL table: に 2.1 にて設定したDB名をmt_無しで入力。
  • Updateボタンをクリック
  • 全てのSQLテーブル上のフィールド名がExtraFiledsとして展開する。
  • 展開したExtraFieldsは全て、ラベル名もフィールド名のままなので各自わかりやすいものに修正して、保存
  • 展開したExtraFieldsは全て、シングルのテキストなので、各自フィールドの用途に合わせてテキストエリアやファイル、チェックボックスなどへ変更する。

以後はPluginDataと同様の作業としてテンプレートの修正が必要となる。

エントリー画面から入力し、ページの保存及び公開やサイトの再構築(必要であれば)を行う。

※既に一度、PluginDataで作成したExtraFieldは自動でSQLテーブルに格納される訳ではないことに注意すること。(再設定と同じである)