Как подключиться к существующей базе данных в Ruby on Rails - PullRequest
0 голосов
/ 18 июня 2020

У меня есть таблица с именем User в моем проекте, и я хочу получить доступ к другой базе данных другого существующего проекта. База данных, к которой я хочу получить доступ, является частью проекта, который мне нужен для предоставления доступа к моей таблице User. Причина в том, что моя таблица User, которая отвечает за аутентификацию пользовательской базы, и после их аутентификации они вернут токен , чтобы они могли получить доступ к другой базе данных. database.yml моей таблицы User настроен следующим образом:

default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  database: db/production.sqlite3

База данных другого проекта, к которому я хочу получить доступ, настроена следующим образом:

default: &default
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_bin
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  variables:
    sql_mode: TRADITIONAL

development:
  <<: *default
  username: root
  password:
  database: <company_name>dev

test:
  <<: *default
  database: <company_name>_test
  username: root
  password:

production:
  <<: *default
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: <%= ENV['RDS_HOSTNAME'] %>
  port: <%= ENV['RDS_PORT'] %>

Как решить эту проблему?

1 Ответ

0 голосов
/ 18 июня 2020

Вы можете добавить другую базу данных в первую конфигурацию (при необходимости отрегулируйте, я просто скопировал вашу конфигурацию из второй):

...

other:
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_bin
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  variables:
    sql_mode: TRADITIONAL
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: <%= ENV['RDS_HOSTNAME'] %>
  port: <%= ENV['RDS_PORT'] %>

Затем вы можете создать подпапку в вашем каталоге app/models, чтобы дать вы ActiveRecord доступ к другой базе данных. Сначала создайте базовый класс:

# app/models/other/base.rb

module Other
  class Base < ActiveRecord::Base
    establish_connection configurations['other']
    self.abstract_class = true
  end
end

Затем добавьте модель пользователя в этот модуль:

# app/models/other/user.rb

module Other
  class User < Base
    self.table_name = 'users'
    self.primary_key = 'id'
  end
end

Теперь вы можете ссылаться на «другую» таблицу пользователей следующим образом:

Other::User.find(other_user_id)

Также имейте в виду, что вам потребуется установить адаптер базы данных mysql2 в Gemfile вашего первого проекта.

Также обратите внимание, что вам, вероятно, понадобится лучшее имя / модуль, чем «Другое» ", Я просто использовал это в качестве примера.

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