MT-ShrinkFInfo
Movable Type 3.1でしばしば問題となる、肥大化したfileinfo.dbをshrinkするための簡単なツールを公開します。3.14以降のバージョンでは不要です。
MT-ShrinkFInfo.ja JP - Ogawa Code
Movable Type 3.1でBerkeleyDBを使っている場合、再構築を繰り返すたびにfileinfo.dbが肥大化するという問題が知られています(TITO's Web Page: Movable Type「fileinfo.db」の肥大化)。具体的には、MTは再構築のたびに古いFileInfoオブジェクトを削除して、新しいFileInfoオブジェクトを生成しますが、このときBerkeleyDBを使っている場合に限って、(1) 古いFileInfoオブジェクトの消去をし損なう場合があること、(2) 削除してもfileinfo.dbファイルの空き領域が開放されないこと、がこの肥大化の原因となっています。
mt-shrinkfinfo.cgiは、この肥大化したfileinfo.dbをshrinkするための簡単なツールです。Movable TypeのPerl APIを使って実現されているため、直接DBイメージファイルを削除したりする方法に比べて安全であり、また容易です。
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/208
すごいCGI公開してくれてありがとうございます。
さっそく使ってみました。削除せずに楽々とファイル軽量化してくれました。
定期的にこのCGI実行してファイル大きくならないようにしたいと思います。
お邪魔します。MT2.611にも対応できますか
MT3以前のバージョンではfileinfo.dbが作られませんからこの問題は発生しませんよ。
わかりました、ありがとうございます。
はじめまして。CGI実行するだけで、見事にファイルが軽量化してました。なんだか感動ものです。どうもありがとうございました。
TBありがとうございました。
早速導入させて頂きました。
リビルドしなくてもよくなり助かります。
ogawaさん、画期的なCGIのご提供ありがとうございます
私もこの件については手動で対応してきましたが、このような方法で対処できるとは素晴しいと思います。
早速ダウンロードして試させていただきましたが、私のレンタルサーバーの環境では残念ながらInternal Server Errorが発生してしまいます・・、以下がエラーログの内容です。
syntax error at mt-shrinkfinfo.cgi line 44, near "$_ ||"
Execution of mt-shrinkfinfo.cgi aborted due to compilation errors.
お時間があるときにでも御一考頂ければ幸いです、誠に勝手な事ばかりで申しわけございません。
みなさま、お試しいただきありがとうございます。
ちょっとペースが速いですが、0.03にしてみました。基本的には変わっていませんが、プラグインの管理画面からも操作できます。あと、respectiveさんの問題はPerlのバージョンが5.00xであるためだと思いますので、このバージョンで対策をしておきました。
ogawaさん、早速の対策ありがとうございました。
プラグインからの実行、問題なく行えました!更に使いやすくなったのではないかと思います。
これまで手動にてDBモジュールの削除→再構築をやってまいりましたが、忘れて終いいつの間にか重くなっているということが多々ありましたので、メニューへプラグインとしてショートカットを置くとは素晴しいアイディアだと思います!
これからの記事も期待しております、長文失礼しました。
こんばんは~。プラグインのほう、ダウンロードさせていただきました。
管理画面からクリックひとつで実行できるっていいですね。
ファイルの軽量化により、再構築にかかる時間があきらかに短くなりました。
こんばんわ、はじめまして。
Magic White さんよりご紹介いただきまして、プラグイン、導入させていただきました。
これで500エラー解消できました。大変有用なプラグインをご提供いただきまして、感謝です。ありがとうございました。
こちらはMovable Type 3.121を使っているのですが、以下のようなエラーがでます。
使えないのでしょうか?
An error occurred while removing duplicated MT::FileInfo objects: Bad ObjectDriver config: Your DataSource directory ('./db') does not exist.
エントリ本文に書いてありますが、DataSourceにはフルパスを指定する必要があります。Movable Typeのインストールマニュアルにもフルパスを指定する旨書いてありますが、デフォルトの./dbでも動かせてしまうので、そのままにしている人が非常に多いようです。
しかし、MT3 CompliantなプラグインのほとんどがDataSourceにフルパスを要求するので、この機会に変更されることをお勧めします。
見逃していました・・・
無事にできました!ありがとうございます。
いつもお世話になります。メインメニューのプラグイン表示で description に fileinfo.db のサイズを表示するようにしたのですが、エントリーとして投稿してもよろしいでしょうか?
素晴らしいです。どうぞどうぞ。
プラグイン利用させて頂きました。有り難うございます。ただ、管理画面での表示が、"Current size: 0 B"のまま、変わらないのですが、考えられる原因としてなにがありますでしょうか。リンクをクリックしてのdbの圧縮は機能しています。どうぞ御指導よろしくお願いします。
plugin.plの13行目あたりを以下のように修正するとどうなりますでしょうか。
my $finfosize = (-s $finfodb);
早々にアドバイスいただき、有り難うございます。早速試してみましたが、"Shrink enlarged db/fileinfo.db. Current size: 0 B"のままです・・・トホホ。みなさん普通に表示されているとのことですので、完全に私の見落としがどこかにあるはずなのですが・・・・う~ん、finfodbもフルパスで書いてるし・・・実行は問題なくされて結構圧縮されてるし・・・わかりませんです。もちょっとアレコレ試してみます。うまく表示されましたら改めて報告いたします・・・いつになるかわかりませんが(笑)。
こんばんは~。plugin.plの末尾に「1;」 で、見事、エラーは回避されました。
ありがとうございました。本来こちらで質問すべきことでしたね、申し訳ありませんでした。
>さえらさん
いえ、ここは「ノークレーム・ノーリターン」なので(笑)
さえらさん & yujiroさん:
私の環境では再現できない問題だったので自信はなかったのですが、ご確認いただきありがとうございます。
クレームじゃないご要望はお待ちしていまーす ;-)
12日の午前1時ごろコッソリ入れ替えたバージョンのplugin.plでは「1;」が追加してあります。あとStorableがなくて困っている方も結構いるらしいので(Perl 5.0054でも普通にインストールされるはずなんですが…)それの対策らしきこともしました。本文中に追記してあるとおりです。
plugin.plファイルを入れ替えたら無事サイズ表示されるようになりました。感謝です。有り難うございます。
こんばんわ。0.04へアップさせました。
普通に動作は、してるんですが、エラーログみると
Plugin error: plugins/ShrinkFInfo/plugin.pl plugins/ShrinkFInfo/plugin.pl did not return a true value at lib/MT.pm line 293.
と何回も出ています。
エントリー出すときにいつも出てる模様で、Ping送るときに出てるエラーのような気もします。
MT上では、問題なさそうなんですが、宜しくお願いします。
12日修正版でてたとは、失礼しました。差し替えてみました。
これで様子みますです。
何がありましたら報告します。
分かりにくかったですね。
12日差し替え版を「0.04a」と呼ぶことにしました。
素晴らしいPlug-inを、どうもありがとうございました。
当方、昨日あたりからずっと500エラーに悩まされていたので、大変に助かりました。これで、またしばらくはブログの更新に集中出来そうです。(^^
500エラーに悩まされて、解決策を探していてここにたどり着きました。
さっそくDLさせて頂き、Plug-inに入れ
利用可能なプラグインの設定のところに、
Shrink enlarged db/fileinfo.db. Current size: 33.69 MB
と表示されてるのですが、
ShrinkFInfo Plugin, v.0.04 をクリックしても真っ白な画面になるだけです。
私の設定が違っているのだと思いますが、どこが違うかわからなく困ってます。
何か考えられる原因はありますか?
「真っ白」というのは何も一文字も表示されないという意味でしょうか。
まずはmt.cfgのDataSourceをフルパスで指定しているかどうか、mt-shrinkfinfo.cgiに実行パーミッションを設定しているかどうか、を確認してください。
あとはアップロードするときに改行コードを変更していないかどうか(FTPクライアントでASCIIモードにしているかBINARYモードにしているか)、も関係ありそうですね。
素早い返答ありがとうございます。
真っ白とは一文字も表示されないという意味です。
mt.cfgのDataSourceをフルパスに変更しました。
mt-shrinkfinfo.cgiに実行パーミッションはロリポップなので700に設定しています。755でもやってみましたが同じ症状です。
アップロードはBINARYモードで転送しています。
よろしくお願いいたします。
分かりませんねー。やっぱりファイルの転送に失敗しているんじゃないですかねー。
fileinfo.dbを1度削除し、再構築したところ正常に動くようになりました。
いろいろとありがとうございました。
TBさせてくださいね。
よろしくお願いいたします。
Make sense!
確かに500エラーが起きたときにfileinfo.dbが不完全な状態になってしまうとこうした問題はありそうですね。しかし、これはMT Perl APIではいかんともし難いです。えじゃさんがなさったように一旦は手でファイルを消す必要がありますね。
こんばんわ、はじめまして!
えじゃさんのエントリーを見て、導入させて頂きました
ありがとうございました
はじめまして。非常にありがたく利用させた頂きました。
ワンクリックでOKなので楽チンですね。
で、異なるサーバーでの2つのMTに導入したのですがメインメニューに「利用可能なプラグインの設定」として表示されるのとされないのとができてしまいました。
設定サイズを超えた場合は各ブログの「。。へようこそ」のところには表示されるのですが。。何故でしょう?
StorableというPerlモジュールがサーバーにインストールされていない場合には「利用可能なプラグイン」のところには表示されません。
ありがとうございます。12/12の件はそういうことだったんですね。
Storable というのか分からず(当然サーバーにインストールされているかも分からず)、読み流してました。すみません。
Ogawaさま
3.121にバージョンアップしてからこの「500エラー」に悩まされておりきした。プラグイン、さっそく使わせていただこうと思ったのですが、当方のサーバーにはStorableがインストールされておりません。そこで、「0.04a」をインストールしたいのですが、ダウンロードさせていただいたcgiは「0.04」のようです。これをインストールしてもウェルカム画面に何も表示されませんので、もし可能なら0.04aをダウンロードできるようにしていただければと思うのですが。勝手なお願いで恐縮ですが、お願いします。
ダウンロードされたバージョンが0.04aです。ウェルカム画面に表示されませんか。だとすると、FileInfoのサイズが1MBに満たないか、あるいは別の問題があるのでしょう。
しかし、根本的にはMT3.151にバージョンアップすることをお勧めします。
Ogawaさま さっそくのご回答ありがとうございます。
そうですね、MTのバージョンアップかサーバーの変更を考えることにします。