« コンテナタグとグローバルフィルター | メイン | dopvSTAR* 検索結果文字化け対策 »

●レンタルサーバで複数のMTをインストールする方法

レンタルサーバ等、「1アカウントに付き使用可能なデータベース(インスタンス)1つ」という制限がある場合、もし複数のMTをインストールしたい場合に問題が発生します。
(ここでいう「データベース(インスタンス)」というのは、mt-config.cgiの「Database」に指定するデータベース名のこと。)
こういう場合は、生成されるテーブル名を変更しなくてはなりません。
その方法をメモしておきます。

(対象:MT3.2以上(3.3対応)、MySQLもしくはPostgreSQL使用の場合)
2006.08.01 追記あり)

初めに

MTでは、テーブル名にprefix(接頭辞)を付けることで、他のテーブルと区別するようになっています。
標準では"mt_"です。
これをMTそれぞれで別のモノに変更することで、データベースは一つでも複数のMTをインストールすることができます。

例として、インストールする各MTを「MT1」、「MT2」、「MT3」、…とし、それぞれに対応するprefixを"mt1_","mt2_","mt3_", ... として説明します。

ソースの編集(ハッキング)

以下のファイルをテキストエディタで開きます。

  • lib/MT/ObjectDriver/DBI/mysql.pm(MySQLの場合)
  • lib/MT/ObjectDriver/DBI/postgres.pm(PostgreSQLの場合)

「mt_」という文字列を全て、インストールするMTごとに決めた別のprefix("mt1_","mt2_","mt3_", ... のいずれか)に置換します。

2006.08.01 追記】
分かりやすいところに 'mt_' という記述がかたまっています(sub _prepare_from_where の記述中)が、それ以外にも存在するので注意してください。
特に、文字列中に「mt_」が含まれている('mt_'だけで一つの文字列になっていない)場合もあるので、要注意です。
例として、mysql.pm ならば、以下↓(MT3.2ならば165行目、MT3.31ならば230行目)も置換対象です。

my $sth = $dbh->prepare('describe mt_' . $ds) or return undef;

my $sth = $dbh->prepare('describe mt1_' . $ds) or return undef;

テキストエディタの一括置換機能が使用できるならば、「mt_」を全て「mt1_」(「mt2_」「mt3_」...)に置換すればOKです。

インストール

MT1、MT2、MT3、…をそれぞれ別のディレクトリにアップロードして、インストール作業を実行します。

以上。

トラックバック

» レンタルサーバで複数のMTをインストールする方法 〜SQLite編〜 from あんちもん2.Lab
DBとしてSQLiteを使用している場合に、複数のMTをインストールする方法について(メモ)。 [Read More]

コメント

参考にさせていただきました。
ありがとうございます。
本文中には記述がなかったのですが、
lib/MT/ObjectDriver/DBI.pm
というファイルにも
sub table_prefix { 'mt' }
という記述があり、ここも'mt1'に変更する必要がありました。
MTのバージョンは3.34です。
以上捕捉させていただきました。

>Kさま
フィードバックありがとうございます。
すみません、見落としがあったようですね(汗)
ご指摘・ご報告ありがとうございます。
近いうちに記事を修正したいと思います。

コメントする