使用JRuby,Oracle和二进制数据从Rails 3.1升级到3.2获取unserializable_attribute?的NoMethodError

时间:2012-02-10 05:14:35

标签: ruby-on-rails-3.2 activerecord-jdbc

我有一个使用在JRuby上运行的Oracle构建的简单Rails 3.1 CRUD应用程序。模型类的属性包含存储在Oracle blob列中的二进制数据。

一切都适用于3.1,但是当使用Rails 3.2运行时,它会抛出NoMethodError寻找unserializable_attribute?。我可以回到3.2而不改变其他任何东西,所以它很明显与rails版本的变化有关。

unserializable_attribute?从文件activerecord-jdbc-adapter-1.2.2 / lib / arjdbc / oracle / adaptor.rb调用

从grepping source,方法unserializable_attribute?似乎在activerecord-3.1.3 / lib / active_record / attribute_methods / read.rb中定义。但是在3.2版本的read.rb中不再存在该方法。

所以我猜测activerecord -jdbc-adapter需要进行一些更改才能使用Rails 3.2的更改。

其他人遇到这个?或者建议如何解决?

1 个答案:

答案 0 :(得分:4)

事实证明,这个错误是在活动的recordjdbc-adapter github网站上报告的,已经修复,但尚未作为ruby gems的新版本发布。

如果您的rails应用程序使用jdbc连接到数据库,并且您的任何表中都有BLOB,则可能需要等待升级,直到更新的适配器被释放。

或者,如果您不想等待,可以应用在activerecordjdbc-adapter github站点上发布的直接修订。它的核心非常简单;只需找到调用:unserializable_attribute?(c.name,c)并将其替换为value.is_a?(哈希)