如何在JRuby 9.2.20.0 + Rails 6.x项目中配置使用H2数据库
问题1:JRuby 9.2.20.0 + Rails 6 项目集成H2数据库解决方案
报错原因
你遇到的参数错误是因为直接使用通用jdbc适配器缺少H2数据库的专属适配逻辑,旧版activerecord-jdbch2-adapter确实不兼容Rails 6,但Rails 6对应的activerecord-jdbc-adapter 60.x版本已经内置了H2支持,不需要额外安装旧的H2适配器。
操作步骤
- 调整Gemfile依赖
# 保留原有Rails 6要求的jdbc适配器版本 gem 'activerecord-jdbc-adapter', '~> 60.4' # 添加H2的JDBC驱动依赖 gem 'jdbc-h2', '~> 2.1'
执行bundle install安装依赖。
2. 修改config/database.yml配置
不要使用通用adapter: jdbc,直接指定内置的H2适配器:
default: &default adapter: h2 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: sa password: development: <<: *default url: jdbc:h2:./db/development;AUTO_SERVER=TRUE;DATABASE_TO_UPPER=false test: <<: *default url: jdbc:h2:./db/test;DATABASE_TO_UPPER=false production: <<: *default url: jdbc:h2:./db/production;AUTO_SERVER=TRUE;DATABASE_TO_UPPER=false
参数说明:
AUTO_SERVER=TRUE:开启多连接模式,允许同时从进程外访问同一份数据库文件DATABASE_TO_UPPER=false:禁止H2自动将表名、字段名转换为大写,适配Rails默认的小写命名规则- 如果需要开启PostgreSQL兼容模式,可在url末尾追加
;MODE=PostgreSQL
- 执行迁移
H2是嵌入式数据库,不需要手动执行rails db:create,第一次连接时会自动创建数据库文件,直接执行:
rails db:migrate
即可完成迁移,数据库文件会自动生成在项目db目录下。
问题2:普通CRuby项目的H2集成方案
H2是基于JVM运行的数据库,原生只支持Java生态调用,普通CRuby没有生产级的成熟直接集成方案。如果有嵌入式数据库需求,CRuby生态更推荐使用SQLite,有完善的官方ActiveRecord适配器和全生态支持,功能覆盖H2嵌入式模式的绝大多数使用场景。
如果一定要在CRuby中使用H2,只能采用间接方案:将H2作为独立TCP服务启动,通过Ruby的JDBC桥接库调用驱动连接,但该方案性能损耗大、维护成本高,不建议在生产环境使用。
内容的提问来源于stack exchange,提问作者F.M.
相关产品推荐
相关产品推荐

