You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 5未引用自定义修改的ActiveRecord-jdbc-adapter问题求助

自定义activerecord-jdbc-adapter在Rails 5.2中未加载,仍使用默认代码的排查与解决

问题背景

将应用从Rails 3.2升级至5.2.8.1,此前为连接Progress OpenEdge数据库修改过activerecord-jdbc-adapter,在Rails 3.2下稳定运行。现已生成自定义版本的gem(52.8.xxx)并绑定到Rails 5.2,但系统未加载修改后的src/java/arjdbc/jdbc/RubyJdbcConnection.java,报错行号对应官方未修改源码,推测仍在使用Rails依赖的默认适配器代码。

排查与解决步骤

1. 确认自定义Gem的加载有效性

  • 执行bundle show activerecord-jdbc-adapter,检查输出路径是否指向你的自定义gem目录,而非官方仓库下载版本。
  • 若路径不符,需在Gemfile中明确指定自定义gem的本地路径:
    gem 'activerecord-jdbc-adapter', '= 52.8.xxxxx', :platform => :jruby, :path => '/本地自定义gem的绝对路径'
    
  • 或者先将自定义gem安装到本地JRuby仓库:
    gem install /path/to/your/activerecord-jdbc-adapter-52.8.xxxxx.gem
    
    再执行bundle install锁定版本。

2. 验证Java代码编译与打包完整性

  • activerecord-jdbc-adapter的Java代码会编译为jar包,执行以下命令检查修改后的类是否被正确打包:
    jar tf /path/to/your/custom/gem/lib/arjdbc/jdbc/arjdbc-jdbc.jar | grep RubyJdbcConnection
    
    确认输出中存在arjdbc/jdbc/RubyJdbcConnection.class,且修改后的jar包大小与官方版本有差异。
  • 执行rake adapters:build时,查看编译日志,确保RubyJdbcConnection.java无编译错误,成功生成class文件。

3. 消除JRuby类缓存干扰

  • JRuby会缓存加载过的Java类,清空缓存后重试:
    rm -rf ~/.jruby/cache
    
    重启Rails控制台后执行MyModel.first测试。

4. 强制指定Gem加载优先级

  • 检查bundle list输出,确认无其他gem间接引入官方版本的activerecord-jdbc-adapter。若有,执行bundle update activerecord-jdbc-adapter强制更新到自定义版本。
  • 可在Gemfile中添加require: false,手动控制加载时机:
    gem 'activerecord-jdbc-adapter', '= 52.8.xxxxx', :platform => :jruby, :require => false
    
    然后在config/initializers/jdbc_adapter.rb中手动加载:
    require 'arjdbc/jdbc'
    

5. 验证适配器加载来源

  • 在Rails控制台中执行以下命令,确认加载的适配器类来自自定义gem:
    # 查看连接配置的适配器
    puts ActiveRecord::Base.connection_config[:adapter]
    # 查看JdbcAdapter类的来源路径
    puts ActiveRecord::ConnectionAdapters::JdbcAdapter.instance_method(:initialize).source_location
    
    若路径指向官方gem,需重新检查Gemfile配置与bundle安装结果。

内容的提问来源于stack exchange,提问作者jpa57

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:26:22