【重要】ver.0.9.6bで、新規エントリの追加をするとIDが壊れる

ユーザーさんによるシステムの不具合報告です。できるだけ状況を詳しくご報告ください。

モデレータ: webmaster

返信
webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

【重要】ver.0.9.6bで、新規エントリの追加をするとIDが壊れる

投稿記事 by webmaster » 2005年2月27日(日) 11:15

 webmasterです。

 ver.0.9.6bに大変重大な不具合が発見されました。
 申し訳ありませんが、早急にver.0.9.6cにバージョンアップして頂けますよう、
お願いいたします。m(_ _)m

 この不具合は、新規エントリを追加するとIDがおかしくなっていき(10→1011→101112→・・)、
最後には壊れる、というものです。

 既存のエントリデータには影響が無いものの、IDを管理するファイルが壊れてしまう
という重大な影響があります。

 既にIDがおかしくなってしまった方は、エントリフォルダの"xxxx.sequence"という
ファイルを開いて修正してください。このファイルには最新のエントリIDが保存されて
いる必要があるので、ここに最新のIDを記入して保存しなおしてください。

 ご不明な点などはこちらにてご質問ください。
 重ね重ね大変ご迷惑をおかけしました。m(_ _)m

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: 【重要】ver.0.9.6bで、新規エントリの追加をするとIDが壊れる

投稿記事 by webmaster » 2005年2月27日(日) 11:43

 webmasterです。
 この度は大変ご迷惑をおかけしております。

 既にエントリIDがおかしくなってしまったエントリについては、最も簡単な修復
方法は、

 (1) 一旦、エントリIDがおかしくなったエントリを全て削除する。
 (2) エントリフォルダ内の xxxxxx.sequence というファイルを開いて、
   中に最新のエントリIDを設定する。

 という方法なのですが、もしそれが難しい場合は、以下の手順でデータを
修正することができます(かなり難易度が高いので、バックアップを取って
から作業してくださいませ)。

 以下、entry1という名前のエントリフォルダ名と仮定します。

【状況】
 entry1.00001.xml
 entry1.00002.xml
 entry1.00003.xml
 entry1.00034.xml ←本来、00004
 entry1.00345.xml ←本来、00005
 entry1.index.xml
 entry1.sequence

【対処】
(1) エントリファイル名を修正
 entry1.00034.xml → entry1.00004.xml
 entry1.00345.xml → entry1.00005.xml

(2) エントリファイルの中身を修正
 entry1.00004.xml、entry1.00005.xmlをエディタで開いて、
 entry要素のid属性を、正しいidに修正して保存しなおす。

(3) entry1.index.xmlを修正
 entry要素のhref属性とid属性を修正して保存しなおす。
 この例で言うと、

 <entry href="entry1.00034.xml" id="00034"><sortkey ....
 <entry href="entry1.00345.xml" id="00345"><sortkey ...

 という箇所があるので、

 <entry href="entry1.00004.xml" id="00004"><sortkey ....
 <entry href="entry1.00005.xml" id="00005"><sortkey ...

 と修正して保存する。

(4) entry1.sequenceを修正する

 ファイルを開くと、"345"となっているので、これを"5"に直して保存する。

 以上です。
 基本的には、エントリ削除→sequenceファイル修正→新規追加を
お勧めします。m(_ _)m

p.s.
 良く見たら、CMS Designerの「お知らせ」に最近追加したエントリも、IDがおかしく
なっていました。。。 :cry:
最後に編集したユーザー webmaster on 2005年2月27日(日) 15:42 [ 編集 1 回目 ]

nobu
記事: 2
登録日時: 2005年2月27日(日) 09:59

Re: 【重要】ver.0.9.6bで、新規エントリの追加をするとIDが壊れる

投稿記事 by nobu » 2005年2月27日(日) 12:40

素早いご対応ありがとうございました。
早速アップデートしてみました。

結果、手動で修正→アップの場合は、やはりまだエラーになってしまいました。
なのでこの方法はとりあえず置いといて、エントリ削除→新規追加をしました。
こちらはもちろん、成功しました。

試しに、その後エントリーを1,2,3,4,5と作り、
エントリー2〜5までを削除し、
再度エントリー2を作成した場合はIDが00006になりました。
一度作成されたIDは削除してしまったら再度作成できないみたいですね。

そこで(動作上は問題ないのですが)IDを連番にしたいと思い、
シーケンスファイル[hogehoge.sequence]を手動で修正したのですが、
またまたエラーが出てしまいました。

どうやら手動では上手く修正できないみたいなんです。
やはりエントリー削除→新規追加するしかないでしょうか。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: 【重要】ver.0.9.6bで、新規エントリの追加をするとIDが壊れる

投稿記事 by webmaster » 2005年2月27日(日) 15:50

 webmasterです。
 申し訳ありません、先ほど投稿した「最も簡単な修復方法」に「sequenceファイル
を修正する」というのが抜けていた為、投稿内容を修正しました。m(_ _)m
 既にエントリIDがおかしくなってしまったエントリについては、最も簡単な修復
方法は、

 (1) 一旦、エントリIDがおかしくなったエントリを全て削除する。
 (2) エントリフォルダ内の xxxxxx.sequence というファイルを開いて、
   中に最新のエントリIDを設定する。
 sequenceファイルの内容が既に壊れている為、単にエントリ削除→追加だけ
ではやはり追加時にエラーになるかと思います。申し訳ありませんでした。

nobu さんが書きました:そこで(動作上は問題ないのですが)IDを連番にしたいと思い、
シーケンスファイル[hogehoge.sequence]を手動で修正したのですが、
またまたエラーが出てしまいました。

どうやら手動では上手く修正できないみたいなんです。
やはりエントリー削除→新規追加するしかないでしょうか。
 sequenceファイルには、エントリIDが現在「00004」の場合、単に"4"とだけ
記入しておいてくださいませ。これも先ほどの説明では分かりにくかった
ですね・・・すいません。

 ちなみに、仰るとおり、追加するたびに「最新のエントリID(sequenceファイル
の内容)」はカウントアップされていきますが、エントリを削除しても最新のIDは
変更されません。

 これは、検索エンジンなどで、既に削除されたIDへのリンクがキャッシュとして
残っている場合に、別のエントリを表示してしまわないようにする為の対策です。

 もし、ページ上でエントリに連番を振りたい場合は、デザイン定義ファイル中に
以下の記述を追加してみてください。

コード: 全て選択

    <xsl:value-of select="position()"/>
 "position()"は、エントリの「並び順」を取得するXSLTの命令で、1から連番に
なります。

nobu
記事: 2
登録日時: 2005年2月27日(日) 09:59

ありがとうございました。

投稿記事 by nobu » 2005年2月27日(日) 19:31

何度もすみませんでした。
なんとか解決しましたのでご報告します。

まず、ご説明いただきました通り、sequenceファイルを修正してアップ後、新規エントリーの作成を試みたのですが、エラーが出てしまいました。既に存在するエントリの修正は問題なくできるのですが、新規にエントリを作成しようとするとエラーが出ます。

そのエラー表示の中にPermissionDeniedという表示があったのでTarminalを使い(MacOSXを使ってます)サーバへ直接アクセスし調べてみることにしました。

結果、sequenceファイルのオーナーが
修正前:nobody
修正後:marumaru(私のユーザ名)
に変わってしまってました。

というわけで、marumaru→nobodyに戻すことで、新規エントリを作成してもエラーが出なくなり、めでたく解決しました。(chownを使えるようにするために知人のサーバ管理者にmarumaruの権限を若干変更してもらいました。)お騒がせしました。

webmaster さんが書きました: ちなみに、仰るとおり、追加するたびに「最新のエントリID(sequenceファイルの内容)」はカウントアップされていきますが、エントリを削除しても最新のIDは変更されません。

 これは、検索エンジンなどで、既に削除されたIDへのリンクがキャッシュとして残っている場合に、別のエントリを表示してしまわないようにする為の対策です。
なるほど、そうですよね。

webmaster さんが書きました: もし、ページ上でエントリに連番を振りたい場合は、デザイン定義ファイル中に以下の記述を追加してみてください。

コード: 全て選択

    <xsl:value-of select="position()"/>
 "position()"は、エントリの「並び順」を取得するXSLTの命令で、1から連番になります。
こちらも今度試してみようとおもいます。

ありがとうございました。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: ありがとうございました。

投稿記事 by webmaster » 2005年2月27日(日) 20:25

 webmasterです。

 nobuさん、事後報告ありがとうございます。m(_ _)m

 ところで、エントリIDを連番にしたいという件ですが、エントリIDを任意の番号に
変更する機能をつけてはどうか、という意見が開発メンバーから挙がりまして、
現在その是非について検討中です。

 ひょっとしたらいずれその機能が実装されるかもしれません。
 またご意見などありましたら、お気軽にお寄せくださいませ。

blue
パワーユーザー
記事: 70
登録日時: 2005年1月31日(月) 20:49

賛成票1

投稿記事 by blue » 2005年2月28日(月) 18:34

こんにちは。いつもお世話になります。

「エントリIDを任意の番号に変更する機能」
賛成かもです。
私は現在、エントリ項目に「表示順」なるものを追加してこれに連番をふり、
ソートの対象にすることで思い通りの並び順を得ています。
ナビゲーションで捲る順番としても機能させています。
この機能が追加されればそのまま使えますね!

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: 賛成票1

投稿記事 by webmaster » 2005年3月01日(火) 01:57

 webmasterです。
 blueさん、ご意見ありがとうございます。

 なるほど、エントリIDをソート順にすれば、そのままエントリの並び順情報としても
使えますね・・・。
 検討してみます。m(_ _)m

返信