2011年3月17日

[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

--
西 啓一朗 <ktouth@xxxxx>

投稿者 xml-rpc : 2011年3月17日 14:32
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/102626
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。