From kazuhiko @ fdiary.net Fri Aug 1 13:01:09 2003 From: kazuhiko @ fdiary.net (Kazuhiko) Date: Fri, 01 Aug 2003 13:01:09 +0900 Subject: [Mobo-dev] 月がかわったらエラー Message-ID: かずひこです。 8 月になって mobo にアクセスしたら、 def total( cond = {} ) price = 0 each_monthly do |m| price += m.total(cond) end price end とか def calendar @years = {} month_list.sort.each do |m| year = m[0, 4] if monthly( m ).item_size > 0 then @years[year] = [] unless @years[year] @years[year] << m end end end とかで、nil の total とか nil の item_size なんか知らないよ、みたいにエ ラーになるようになりました。 データのない月へのアクセスがあったら、Monthly::new を呼ぶようにする必要 がありそうですね。あとで修正する予定ですが、取り急ぎご報告まで。 -- かずひこ ★シャア「名字が付いてない」 ☆一兵卒「あんなの飾りです。偉い人にはそれが分からんのです」 From masao @ ulis.ac.jp Fri Aug 1 17:45:35 2003 From: masao @ ulis.ac.jp (Masao Takaku) Date: Fri, 1 Aug 2003 17:45:35 JST Subject: [Mobo-dev] 月がかわったらエラー In-Reply-To: Your message of "Fri, 01 Aug 2003 13:01:09 +0900". Message-ID: <030801174535.M0111018@nile.ulis.ac.jp> たかくです。 すみません。どうも、前回の変更部分で データの無い月を考慮し忘れていたようですね。 (ダミーデータだけでテストしていたので…) In , kazuhiko @ fdiary.net wrote: > とかで、nil の total とか nil の item_size なんか知らないよ、みたいにエ > ラーになるようになりました。 > > データのない月へのアクセスがあったら、Monthly::new を呼ぶようにする必要 > がありそうですね。あとで修正する予定ですが、取り急ぎご報告まで。 手元でも以下のようなエラーになりました。 -- /usr/local/lib/ruby/1.6/pstore.rb:45:in `[]': undefined root name `mobo' (PStore::Error) /home/masao/public_html/test/mobo-test/erb.rb:235:in `eval' /home/masao/public_html/test/mobo-test/erb.rb:235:in `result' /home/masao/public_html/test/mobo-test/mobo.rb:686:in `do_eval_rhtml' /home/masao/public_html/test/mobo-test/mobo.rb:655:in `eval_rhtml' /home/masao/public_html/test/mobo-test/index.rb:47 -- 一応、手元では↓な感じで動くようですが、どうでしょうか? Index: mobo.rb =================================================================== RCS file: /cvsroot/mobo/mobo/mobo.rb,v retrieving revision 1.11.2.14 diff -u -r1.11.2.14 mobo.rb --- mobo.rb 24 Jul 2003 00:03:31 -0000 1.11.2.14 +++ mobo.rb 1 Aug 2003 08:14:50 -0000 @@ -608,6 +608,7 @@ begin @monthly = @db['mobo']; rescue; end unless @monthly then @monthly = Monthly::new( "#{@year}#{@month}" ) + @db.abort end end end @@ -618,7 +619,11 @@ elsif FileTest::exist?( "#{@conf.data_path}#{month}.db" ) then @db = PStore::new( "#{@conf.data_path}#{month}.db" ) @db.transaction do - @db['mobo'] + begin + @db['mobo'] + rescue + Monthly::new( month ) + end end else Monthly::new( month ) @@ -634,11 +639,8 @@ end def each_monthly - Dir::glob( "#{@conf.data_path}??????.db" ).each do |f| - @db = PStore::new(f) - @db.transaction do - yield @db['mobo'] - end + month_list.each do |m| + yield monthly( m ) end end # v0_2 は常用していません…。 # やっぱり、自分で人柱にならないとダメですかね。(^_^;; -- 高久 雅生 // mailto:masao @ ulis.ac.jp From kazuhiko @ fdiary.net Sun Aug 3 01:49:24 2003 From: kazuhiko @ fdiary.net (Kazuhiko) Date: Sun, 03 Aug 2003 01:49:24 +0900 Subject: [Mobo-dev] 月がかわったらエラー In-Reply-To: <030801174535.M0111018@nile.ulis.ac.jp> Message-ID: かずひこです。 At Fri, 1 Aug 2003 17:45:35 JST, Masao Takaku wrote: > > とかで、nil の total とか nil の item_size なんか知らないよ、みたいにエ > > ラーになるようになりました。 > > > > データのない月へのアクセスがあったら、Monthly::new を呼ぶようにする必要 > > がありそうですね。あとで修正する予定ですが、取り急ぎご報告まで。 > 一応、手元では↓な感じで動くようですが、どうでしょうか? 新しい月に入ったときの mobo/ なら動きましたが、まだデータのない月へのい きなりアクセス mobo/?date=200309 とかだとやはりエラーになりました。また、 集計へのアクセス mobo/?date=2003 も同様にエラーになりました。 undefined method `item_size' for nil:NilClass (NoMethodError) ./mobo.rb:775:in `calendar' ./mobo.rb:773:in `each' ./mobo.rb:773:in `calendar' ./mobo.rb:704:in `load_plugins' ./mobo.rb:669:in `do_eval_rhtml' ./mobo.rb:657:in `eval_rhtml' index.rb:48 item_size するまえに nil でないチェックをする、というのでもいいのですが、 もうちょっとスマートな解はあるでしょうか? -- かずひこ ★シャア「名字が付いてない」 ☆一兵卒「あんなの飾りです。偉い人にはそれが分からんのです」 From masao @ ulis.ac.jp Sun Aug 3 18:59:52 2003 From: masao @ ulis.ac.jp (Masao Takaku) Date: Sun, 3 Aug 2003 18:59:52 JST Subject: [Mobo-dev] 月がかわったらエラー In-Reply-To: Your message of "Sun, 03 Aug 2003 01:49:24 +0900". Message-ID: <030803185952.M0102219@nile.ulis.ac.jp> たかくです。 原因がよく分かってなかったのですが、 どうやら 1.8 系での PStore#[] の仕様が変わったためのようでした。 ルート名が無い場合、以下のような返り値になるようです。 1.6系: (例外) 1.8系: nil > item_size するまえに nil でないチェックをする、というのでもいいのですが、 > もうちょっとスマートな解はあるでしょうか? とりあえず MoBoMonth#monthly 中で「nil/例外」のどちらでも Monthly::new を返すようにしてみました。 先ほど、手元で確認してコミットしてみました。 どうでしょうか。 -- 高久 雅生 // mailto:masao @ ulis.ac.jp From kazuhiko @ fdiary.net Sun Aug 3 21:14:40 2003 From: kazuhiko @ fdiary.net (Kazuhiko) Date: Sun, 03 Aug 2003 21:14:40 +0900 Subject: [Mobo-dev] 月がかわったらエラー In-Reply-To: <030803185952.M0102219@nile.ulis.ac.jp> Message-ID: かずひこです。 At Sun, 3 Aug 2003 18:59:52 JST, Masao Takaku wrote: > 原因がよく分かってなかったのですが、 > どうやら 1.8 系での PStore#[] の仕様が変わったためのようでした。 > > ルート名が無い場合、以下のような返り値になるようです。 > 1.6系: (例外) > 1.8系: nil なるほど。 > > item_size するまえに nil でないチェックをする、というのでもいいのですが、 > > もうちょっとスマートな解はあるでしょうか? > > とりあえず MoBoMonth#monthly 中で「nil/例外」のどちらでも > Monthly::new を返すようにしてみました。 こちらでも無事動作しました。どうもありがとうございました。 # そろそろ HEAD にマージしましょうか? -- かずひこ ★シャア「名字が付いてない」 ☆一兵卒「あんなの飾りです。偉い人にはそれが分からんのです」 From kazuhiko @ fdiary.net Mon Aug 18 21:15:51 2003 From: kazuhiko @ fdiary.net (Kazuhiko) Date: Mon, 18 Aug 2003 21:15:51 +0900 Subject: [Mobo-dev] v0_2 ブランチをマージしました。 Message-ID: かずひこです。 v0_2 ブランチから HEAD にマージしました。以下が主な変更点です。 ・データの保存形式が変りました。アップデート後、misc/conv3.rb で変換して ください。 ・更新用の cgi が update.rb として分離しました。アクセス制限を確認してく ださい。 ・プラグインに対応しました。いまのところ、いくつかの設定が 00default.rb に移動しただけですが。:) ・ruby-1.8 に対応しました。ruby-1.6 でも動くと思います。きっと。 というわけで、少なくともデータの非互換にはご注意ください。データを変換す る前にうっかりアクセスしてもデータがふっとぶようなことはないと思いますが、 念のためバックアップを取ってから移行することをお勧めします。 不具合などお気づきの点は何なりとお知らせください。 どうぞよろしくお願いします。 -- かずひこ ★シャア「名字が付いてない」 ☆一兵卒「あんなの飾りです。偉い人にはそれが分からんのです」