我在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行。作为一个说明,我知道这里的连接池存在效率问题,我只是试图让最简单的方法在我花费时间进行高效工作之前工作。
答案 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语句将相应地起作用。