[ruby-list:47946] Rack, Sequel, Ramaze のバグ
From:
西 啓一朗 <receiver@...>
Date:
2011-03-17 05:32:52 UTC
List:
ruby-list #47946
どうも。西 啓一朗です。
現在、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@k-brand.gr.jp>