From: "西 啓一朗" Date: 2011-03-17T14:32:52+09:00 Subject: [ruby-list:47946] Rack, Sequel, Ramaze のバグ どうも。西 啓一朗です。 現在、Ramaze + Sequel という組み合わせでプログラムを組んでいたんですが、 いくつかバグと思われる挙動を発見しました。が、公式が英語で適切なリポート の送り方がよくわかりません。 以下のような内容なんですが、どうしたらいいでしょう? 確認したのは Ruby1.8.7 mswin32 版です。 1: Rack、クッキーの送信時に有効期限の指定が無視される。 Rack 1.2.2 にて確認。 response.set_cookie('foobar', :expires => Time.now + 10 * 86400) と言う指定を行っても時間指定が空になります。原因は Rack::Utils.rfc2822 モジュール関数の最後、strftime の引数に %T を使っているせいのようです。 公式の github を見ると、2月11日にまさしくその対策が行われているのですが、 3月にリリースされた 1.2.2 には反映されていません。タイムラグでしょうか? https://github.com/rack/rack/commit/9ad83ca55dad90b87a4484cd1003fd3527fd1727#lib/rack/utils.rb 2: Sequel、特定条件下にてモデルのカラム参照に失敗する。 Sequel 3.21.0 にて確認。 class Test < Sequel::Model(:tests) plugin :schema plugin :serialization, :marshal, :value set_schema do primary_key :id String :value, :text => true end end 上記のような、schema プラグインと serialization プラグインを同時に指定し たモデルクラスにおいてカラムの参照、上記例では Test#value を参照すると 「super() が参照出来ない」旨のエラーが出ます。serialization 単体では問題 ありません。 原因は define_serialized_attribute_accessor 内のカラム参照メソッド定義の 際に super() を使っているせいのようです。 公式の github を見ると、メソッド定義部分を define_serialized_attribute_accessor として分離しているんですが、その際に @values[column] から super() に書き 換えてられています。この部分が @values[column] の場合は問題ありません。 https://github.com/jeremyevans/sequel/commit/09777ddef3978d28d783f61b8ebd80a2b38341b8#lib/sequel/plugins/serialization.rb 3: Ramaze、Sequel を使ったキャッシュ機構でデータの復帰に失敗する。 Ramaze-2011.01.30 にて確認。 「2: Sequel ...」の問題でトラブルが発生しています。上記サンプルコードは Ramaze::Cache::Sequel::Table モデルクラスを単純化したものです。 公式の github を見ると、もともとこの問題を認識していたのか古いバージョン では対策コードが書かれていたようですが、Ramaze::Cache::Sequel クラスのリ ファクタリングの際に対策コードが削られてしまったようです。同時に Table#value を参照する Ramaze::Cache::Sequel#cache_fetch メソッドもリファ クタリングされ、例外を握りつぶす仕様になっているせいで発見しづらい状況に なっているようです。 https://github.com/Ramaze/ramaze/commit/9b5359e654667400e040ce61e1269ab3236597d4#lib/ramaze/cache/sequel.rb -- 西 啓一朗