ホーム > フォーラム > 開発 > コア開発 > モジュールアップデートを行うとブロックテーブルが壊れる?

モジュールアップデートを行うとブロックテーブルが壊れる?
投稿者: maki_ayaya | 投稿日時: 2007/8/1 14:26 | 閲覧: 70618回
maki_ayaya
XOOPSCube Legacy 2.1.1 を使用しておりますが、モジュールアップデートを行うと、ブロックテーブルに於いて、登録データの時間が消えたり、ブロックの順番が変わったりします。
アンイストールして入れ直すと、直りますので、Legacy 2.1.でモジュールアップデートを行うと、テーブルが一部破損すると言うことでしょうか。
もしそうなら、解決策をご教授ください。
宜しくお願いします。

コメント(11)

新しいものから | 古いものから | ネスト表示 | RSS feed
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: minahito | 投稿日時: 2007/8/2 23:25
minahito
こんばんは。
Legacy 2.1.1 では XOOOPS 2 系と異なり、保存オプション類を保存するためにモジュールのアップデートに対して「ブロックが更新されているか」「更新されているとすればDBのどの部分を更新するべきか」を独自のロジックで類推して処理を決定します。
そのため、テーブルを(MySQLでいうところの)「破損」に追い込むことはありませんが、モジュール特有の結果としてブロックがアンインストール/インストール対象になったということも考えられます。

無条件でそれが発生する場合バグトラッカーに報告があがっていてもおかしくないと思うので、特定の条件によって発生するものと考えるのが順当だと思います。

まずは、OS 、 Web サーバー、PHP のバージョン、 MySQL のバージョンなどの一連の動作環境をお知らせ下さい。そのうえで、その現象が確認されるモジュールを教えていただけないでしょうか(すべてのモジュールで発生する場合、発生が確認されたモジュールをすべて教えてください)。

バグを追跡するには再現条件が必須であり、現象だけ報告されても打つ手がありませんので、ぜひ詳細なレポートを習慣づけてください。
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: noripan | 投稿日時: 2007/8/3 0:49
noripan
こんにちは、minahitoさん

引用:
バグトラッカーに報告があがっていてもおかしくないと思うので


ここで報告されていることと同じ現象ではないでしょうか
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: maki_ayaya | 投稿日時: 2007/8/3 14:36
maki_ayaya
引用:
バグを追跡するには再現条件が必須であり、現象だけ報告されても打つ手がありませんので、ぜひ詳細なレポートを習慣づけてください。


失礼しました。環境は下記になります。

OS:FreeBSD4
Web サーバー:Apache
PHP のバージョン:4.4.1
MySQLバージョン: 4.0.24
発生が確認されたモジュール:weblinks 1.5・news 1.1

宜しくお願いします。
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: minahito | 投稿日時: 2007/8/4 0:35
minahito
引用:

noripanさんは書きました:
ここで報告されていることと同じ現象ではないでしょうか


根っこは同じかもしれないと思いましたけど現象としては別物だと思いました。追加で news の話があがってたので同一かもしれません。念のためアイテムとしては分けようと思います。
(しかしもう今日はヘトヘトなので代理上げするなら明日にします。。)

maki_ayaya さん追加情報ありがとうございました。
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: minahito | 投稿日時: 2007/8/4 8:52
minahito
#1762530の追加レポートにしました。
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: maki_ayaya | 投稿日時: 2007/8/7 10:23
maki_ayaya
minahitoさん、了解いたしました。

次のバージョンで改善されると言うことでしょうか。
それまでの間、アップデイトを行うときは、壊れる前提でデータのバックアップを取っておき、対応すると言うことになりますでしょうか。
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: minahito | 投稿日時: 2007/8/7 21:47
minahito
そうなると思います。
すみませんが修正されるまでよろしくお願いします。
修正は sf.net のモニタ機能でチェックしてみてください。アイテムが修正されればメールが届きますので便利です。^^
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: Marijuana | 投稿日時: 2007/8/8 12:26
Marijuana
無保証ですが・・・

http://marijuana.ddo.jp/ModuleInstallUtils.zip
/modules/legacy/admin/class/に解凍して上書きしてみてください。


もしくは、問題の出るモジュールのxoops_version.phpを修正することで回避出来るかと思います。
例えばnewsモジュールなら
$modversion['blocks'][1]['file'] = "news_topics.php";
$modversion['blocks'][1]['name'] = _MI_NEWS_BNAME1;
$modversion['blocks'][1]['description'] = "Shows news topics";
$modversion['blocks'][1]['show_func'] = "b_news_topics_show";
$modversion['blocks'][1]['template'] = 'news_block_topics.html';
$modversion['blocks'][1]['func_num'] = 1;

$modversion['blocks'][2]['file'] = "news_bigstory.php";
$modversion['blocks'][2]['name'] = _MI_NEWS_BNAME3;
$modversion['blocks'][2]['description'] = "Shows most read story of the day";
$modversion['blocks'][2]['show_func'] = "b_news_bigstory_show";
$modversion['blocks'][2]['template'] = 'news_block_bigstory.html';
$modversion['blocks'][2]['func_num'] = 2;

$modversion['blocks'][3]['file'] = "news_top.php";
$modversion['blocks'][3]['name'] = _MI_NEWS_BNAME4;
$modversion['blocks'][3]['description'] = "Shows top read news articles";
$modversion['blocks'][3]['show_func'] = "b_news_top_show";
$modversion['blocks'][3]['edit_func'] = "b_news_top_edit";
$modversion['blocks'][3]['options'] = "counter|10|25";
$modversion['blocks'][3]['template'] = 'news_block_top.html';
$modversion['blocks'][3]['func_num'] = 3;

$modversion['blocks'][4]['file'] = "news_top.php";
$modversion['blocks'][4]['name'] = _MI_NEWS_BNAME5;
$modversion['blocks'][4]['description'] = "Shows recent articles";
$modversion['blocks'][4]['show_func'] = "b_news_top_show";
$modversion['blocks'][4]['edit_func'] = "b_news_top_edit";
$modversion['blocks'][4]['options'] = "published|10|25";
$modversion['blocks'][4]['template'] = 'news_block_new.html';
$modversion['blocks'][4]['func_num'] = 4;

こんな感じに$modversion['blocks'][x]['func_num'] = x;を各ブロックに追加してください。
$modversion['blocks']の添え字が0から始まっていれば問題出ませんが、0以外から始まっている場合に問題が出てしまいます。
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: maki_ayaya | 投稿日時: 2007/8/8 14:50
maki_ayaya
minahitoさん、Marijuanaさん、お返事ありがとうございます。

今のところ、アップデイトする予定はありませんので、ModuleInstallUtils.zipのdlとxoops_version.phpの修正を控えさせて頂きました。
実施するときに、修正版が出ていなかったら、いずれかを使いたいと思います。

ありがとうございました。
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: ohwada | 投稿日時: 2007/8/11 22:50
ohwada
引用:

試してみましたが。良さそうです。

添え字が 0 始まりか、 1 始まりかで、現象が違うということでしたので、
両ケースを試してみました。
標準モジュールは、1 始まりしかなかったので、 試験用として 0 始まりを作って確認した。

ソースを見ると、
installAllOfBlocks() にて、$modversion['blocks'] について、
3つほど場合を分けて前処理をしているようですね。
ご苦労さまです。
Re: モジュールアップデートを行うとブロックテーブルが壊れる? 
投稿者: ohwada | 投稿日時: 2007/10/14 10:51
ohwada
このバグは 2.1.2 で修正されています。が。

2.1.1 でいったん壊れたものは、
2.1.2 では修復できないです。

で、修復ツールを作ってみました。

XOOPS Block Table Checker
http://linux.ohwada.jp/modules/wfdownloads/singlefile.php?lid=88

==========
XOOPS のモジュールに対して、
xoops_version.php で定義したものと、block テーブルに格納されているものが、
一致しているかを検査します。

● インストール
XOOPS_ROOT_PATH の下に "check_blocks.php" をコピーする

● 使用方法
WEB管理者でログインする
check_blocks.php にアクセスする

不一致があれば、
まずは、モジュール・アップデートを実行する

それで直らないときは、
いったん "Remove Block" を実行して block テーブル内のレコードを削除したあとに、
モジュール・アップデートを実行する

● 適用バージョン
下記のバージョンで動作確認をしています

- XOOPS 2.0.16aJP
- XOOPS Cube 2.1.2
- XOOPS 2.0.17

● 同封したファイル
- check_blocks.php

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top