MT5のβ版が出回る世の中ですが、まだまだMT3系もあちらこちらで動いております(場合によってはMT2も動いていたり……)。
ええ、しかもBarkley DBで、というのも珍しくありません。
昨日、そんなサイトを弊社サーバに引越しさせることがありました。引越のみならずBarkley DBでは重いのでPostgreSQLかMySQLを使うようにしたい、というプラスアルファもあったり。
さすがにMT3関連の知識は折って畳んで記憶の隅っこに乱雑に積まれていたりしますので一生懸命思い出したりGoogleさんに聞いてみたりしてまあなんとかなったかなあ、と。
$ createuser -P --no-adduser --no-createdb dbusername $ createdb --encoding=UTF-8 --owner dbusername dbname
続いてmt-db-convert3x.cgiをmtディレクトリ(mt.cgiがある場所と同じところ)にアップロードして実行権を付けます。
ここでツールがさくっと完走してくれればよかったんですが、なぜか下記エラーが出る
SQLエラーが発生しました: ERROR: syntax error at or near "200851" at character 2044
えーなんじゃこりゃーと思いつつどっかで見たことあるなーとも考えてみると……
あ。Barkley DBにはShift-JISで保存されてる?->Shift-JISの5C問題か!
エラーになっているエントリを見てみるとタイトルが「発表」とか「―(全角ダッシュ)」で終わっていたりする->Shift-JISでの文字コードが「0xNN5C」など、5cで終わっているもので上記エラーが出ています。ああ、そういえばPublishcharsetがShift-JISでタイトルやら本文やら続きやらがその「5C」で終わっているときにそんなエラーが出て記事を保存できない、という事例があったなあ……SJIS+DBってこれがありました。
解決法1:ダウンロードしてあるBarkley DBのデータベースファイルをいじくってからアップロードする
->インデックスファイルとの整合性が壊れそうなので却下。
解決法2:MTの管理画面で全エントリを目視確認して、問題があるものを修正して保存
->まあ面倒ですが一番確実。エントリの件数もそんなに多くないので今回はこれで。
解決法3:変換CGIを改造する(ObjectがMT::Entryの場合は$obj->titleに$obj->title . "(半角スペース)"を設定、とか……)
->エントリが1000件とかあるようならこれをやるしかない気がしますが、今回はやりません。
ちまちまと全エントリを見ていきましたとも。200件中10件くらいですかね、これに引っかかったのは。修正したあとのDBファイルをアップロードして変換CGIを動かしたらうまくいきました。
それと、PostgreSQLの場合はシーケンスの生成がうまくいかないようなので手動で生成&現在値設定(参考:hori-uchi.com様)。
うちの場合はシーケンスは出来ていて現在値が1のまま、というものだったので現在値設定のみ行いました。
3.について
まずはテスト環境としてサブドメイン下で行ったため、mt-config.cgiのStaticWebPathとCGIPathを書き換え。プラスPostgreSQLで動かすためのDBドライバ、DBユーザ名、DBパスワード、ホストをコメント外して記述。ついでにSQLSetNamesもコメントを外して有効に。Barkley DBのDataSourceはコメントアウト。
本番環境切り替え時にStaticWebPathとCGIPathを本番用に書き換えるのも忘れずに。
4.について
出力先ディレクトリのパーミッションをチェック。MTから書き込めるように。
MTにログインできたら設定->公開の「サイトURL」「サイト・パス」をテスト環境に合わせて記述。
本番環境切り替え時に「サイトURL」「サイト・パス」を本番用に書き換えるのも忘れずに。
こんなところでしょうか。
いやーもうとにかく忘れていることが多くて難儀しました。
http://blog.flatbit.co.jp/btlog/mt-tb.cgi/162
Comments
まだコメントはありません。よろしければコメントをどうぞ。
Post Your Comment