В геме ibm_db на Ruby 2.3.4 отсутствует зависимость - PullRequest
0 голосов
/ 11 июня 2018

Я использую Rails 5.2.0 на Ruby 2.3.4 для подключения к базам данных 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.

Для запроса, метод подключения.

config / 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"] %>

app/models/prms_record.rb:

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

app / models / location.rb

class Location < PrmsRecord
end

Я тестирую всего лишь вызовом find_by_sql в контроллере для выбора первого10 рядов таблицы.Как заметка, я знаю, что здесь есть проблемы с эффективностью пула подключений, я просто пытаюсь заставить работать самый простой метод, прежде чем тратить время на его выполнение.

1 Ответ

0 голосов
/ 11 июня 2018

Ваша проблема в том, что камень ibm_db несовместим с arel версии 9.0.

rails 5.2 полагается на active_record 5.2, который полагается на arel версию >= 9.0. ( Источник )

ibm_db имеет requireоператор в строке "lib / active_record / connection_adapters / ibm_db_adapter" 13 ( Source )

require 'arel/visitors/bind_visitor'

Однако arel версии 9.0 больше не имеет этот файл ( Source )

Для того, чтобы ibm_db заработал, вам необходимо понизить рельсы до версии 5.1, которая опирается на active_record 5.1, которая опирается на arel версию ~> 8.0 ( Источник )

arel 8.0 имеет файл "arel / members / bind_visitor.rb" ( Source ), поэтому оператор require будет работать соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...