Rails 5 没有引用修改后的 ActiveRecord-jdbc-adapter

问题描述 投票:0回答:1

问题概述

我有一个带有应用程序的客户端,我正在尝试访问 Rails 5。历史上,我们修改了 activerecord-jdbc-adapter 以访问 Progress OpenEdge 数据库,并且自 Rails 3.2 以来它一直在工作。目前,我可以创建一个新的 activerecord-jdbc-adapter gem (v 52.8.xxx) 并将其与 Rails 5.2.8.1 捆绑在一起,但我收到的错误消息表明它没有使用 src/java/arjdbc/jdbc/RubyJdbcConnection我修改过的.java。查看 Rails 5 存储库,根目录下的 Gemfile 包含适用于平台 Jruby 的 activerecord-jdbcxxxx-adapters,它还应该引入通用适配器。我的理论是,尽管捆绑在我的自定义适配器中,但它使用的是构成 Rails 5 的各种 active* 和 action* gem 中包含的代码。

我想我希望我错了,有人可以告诉我我错过了一些基本的东西。否则我倾向于切换到 ODBC 并放弃 Jruby,这是我不喜欢的改变。

演示问题的步骤:

在 activerecord-jdbc-adapter 克隆中,查看 52-stable

修改 RubyJdbcConnection.java ——添加一堆注释只是为了让它有所不同

rake adapters:build

在rails 5.2应用程序存储库中,使用“jdbc”作为database.yml中的适配器

宝石文件

gem 'rails', '~> 5.2'
gem 'activerecord', '~> 5.2'
gem 'activerecord-jdbc-adapter', '= 52.8.xxxxx', :platform => :jruby

命令

bundle install
RAILS_ENV=test rails c
MyModel.first # Model that is backed by the jdbc database

由于适配器尚未修改为支持 OpenEdge 数据库,因此失败。
RubyJdbcConnection 中的行号与未修改的源代码匹配,而不是我们上面修改的文件。

activerecord ruby-on-rails-5 activerecord-jdbc
1个回答
0
投票

这完全在我们的控制之下。不久前,我们添加了一些自定义 Java 代码并将其放入通过 application.rb 加载的 jar 中。它本来应该只包含我们需要的代码,但无意中包含了 RubyJdbcConnection.java 的编译类文件。我通过提取 jar 文件并查看类文件找到了它。不这样做的另一个原因是:我们当前的方法使用安装在 Sonatype Nexus 存储库中的自定义 gem,因此如果我们遵循当前的做法,这种情况应该不会再次发生。

© www.soinside.com 2019 - 2024. All rights reserved.