Ruby 2.3.4上的ibm_db gem缺少依赖

时间:2018-06-11 14:12:43

标签: ruby db2 ruby-on-rails-5

我在Ruby 2.3.4上使用Rails 5.2.0连接到MySQL(通过mysql2 gem)和DB2(通过ibm_db gem)数据库。

当我尝试连接到DB2时,我得到:

Error loading the 'ibm_db' Active Record adapter. Missing a gem it depends on? cannot load such file -- arel/visitors/bind_visitor

并且跟踪调用

ibm_db (4.0.0) lib/active_record/connection_adapters/ibm_db_adapter.rb:13:in'

组成

require 'arel/visitors/bind_visitor'

它当然看起来像是在尝试加载依赖项,但它无法做到。 bundle install不会返回错误。

我不确定如何检查Bind_Visitors模块是否安装正确,或者还有什么可能导致此错误。如果您需要查看任何日志或Gemfile,请告诉我。

每个请求,连接方法。

配置/ database.yml中:

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  socket: /var/run/mysqld/mysqld.sock

prms: &prms
  adapter: ibm_db
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  socket: /var/run/mysqld/mysqld.sock
  username: <%= ENV["PRMS_USERNAME"] %>
  password: <%= ENV["PRMS_PASSWORD"] %>
  schema: V10INTRA
  host: 10.11.210.61
  port: 446
  authentication: server

development:
  <<: *default
  database: portal
  host: albireo
  username: <%= ENV["DEV_DB_USERNAME"] %>
  password: <%= ENV["DEV_DB_PASSWORD"] %>

应用程序/模型/ prms_record.rb:

class PrmsRecord < ActiveRecord::Base
  self.abstract_class = true
  # establish_connection :"prms_#{Rails.env}"
  establish_connection :prms
end

应用程序/模型/ location.rb

class Location < PrmsRecord
end

我只是在控制器中调用find_by_sql进行测试,以选择表格的前10行。作为一个说明,我知道这里的连接池存在效率问题,我只是试图让最简单的方法在我花费时间进行高效工作之前工作。

1 个答案:

答案 0 :(得分:2)

您的问题是ibm_db gem与arel版本9.0不兼容。

rails 5.2依赖active_record 5.2依赖arel版本>= 9.0。(Source

ibm_db在&#34; lib / active_record / connection_adapters / ibm_db_adapter&#34;中有require个语句。第13行(Source

require 'arel/visitors/bind_visitor'

arel版本9.0不再包含此文件(Source

要使ibm_db正常工作,您需要将rails降级到版本5.1,后者依赖active_record 5.1依赖于arel版本~> 8.0({{3} })

arel 8.0确实有一个文件&#34; arel / visitor / bind_visitor.rb&#34; (Source)因此require语句将相应地起作用。