2

JRuby で実行されている Oracle を使用して構築された単純な Rails 3.1 CRUD アプリがあります。モデル クラスには、Oracle BLOB 列に格納されたバイナリ データを持つ属性があります。

いずれも 3.1 では問題なく動作しますが、Rails 3.2 で実行すると、unserializable_attribute? を探して NoMethodError がスローされます。他に何も変更せずに 3.2 に戻すことができるので、明らかに Rails バージョンの変更に関連するものです。

unserializable_attribute? ファイル activerecord-jdbc-adapter-1.2.2/lib/arjdbc/oracle/adaptor.rb から呼び出されます

ソースの grep から、メソッド unserializable_attribute? activerecord-3.1.3/lib/active_record/attribute_methods/read.rb で定義されているようです。しかし、そのメソッドは read.rb の 3.2 バージョンには存在しません。

したがって、Rails 3.2 への変更に対応するには、activerecord-jdbc-adapter にいくつかの変更が必要だと思います。

他の誰かがこれに遭遇していますか?または解決方法の提案がありますか?

4

1 に答える 1

4

このバグはアクティブな recordjdbc-adapter github サイトで報告され、修正されましたが、まだ ruby​​ gems の新しいバージョンとしてリリースされていないことが判明しました。

jdbc を使用してデータベースに接続する Rails アプリがあり、いずれかのテーブルに BLOB がある場合は、更新されたアダプターがリリースされるまでアップグレードを待つことをお勧めします。

または、待ちたくない場合は、activerecordjdbc-adapter github サイトに投稿されている簡単な修正を適用できます。核となるのは非常に単純です。:unserializable_attribute?(c.name, c) への呼び出しを見つけて、それを value.is_a?(Hash) に置き換えます。

于 2012-02-10T15:26:11.083 に答える