Rails добавляет базу данных - PullRequest
1 голос
/ 11 марта 2012

Можно ли добавить две базы данных в приложение rails?Например, база данных SQLite является переносимой.Я могу скачать базу данных SQLite с другого сервера.Когда приложение rails запускается, оно монтирует базу данных.Могу ли я добавить все данные из другой базы данных в существующую базу данных?Может ли SQLite обеспечить способ объединения баз данных?

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Я не уверен, что вы имели в виду, говоря "добавить базы данных в приложение". Но вы можете использовать 2 разные (с разными схемами) базы данных в вашем приложении. Например:

конфиг / database.yml

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: project_dev
  pool: 5
  username: project
  password:

test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: project_test
  pool: 5
  username: project
  password: 

sqlite:
  development:
    adapter: sqlite3
    database: db/development.project.db
    pool: 5
    timeout: 5000

  test:
    adapter: sqlite3
    database: db/test.project.db
    pool: 5
    timeout: 5000

Модели:

Абстрактная модель для всех моделей sqlite; использует соединение ниндзя драгоценный камень

class SqliteModel < ActiveRecord::Base
  self.abstract_class = true
  use_connection_ninja(:sqlite)
end

Модель Sqlite

class Book < SqliteModel
  set_table_name  :Books
  set_primary_key :BookID

  belongs_to  :volume,  :foreign_key => :VolumeID
  has_many :chapters,   :foreign_key => :BookID
end

Mysql модель

class Highlight < ActiveRecord::Base
  # ...
end

Вы даже можете использовать ассоциации между таблицами в разных базах данных.

Но если вы спрашивали об использовании 2 баз данных с одинаковой схемой (т. Е. Просто разные данные), то мой ответ - нет, это невозможно (хотя я могу ошибаться). Я думаю, что это вопрос репликации, синхронизации, резервного копирования или чего-то подобного - уровень БД, а не приложения.

Конечно, вы можете иметь 2 одинаковые таблицы в обеих базах данных, 2 модели - по одной на базу данных, а затем просто копировать записи из одной в другую. Но Rails не сделает этого автоматически.

1 голос
/ 12 марта 2012

Если вы хотите «заполнить» свою базу данных данными из внешнего источника, например из центрального местоположения, вам лучше всего:

  • Предоставить такие данные в простом итеративном формате (например,CSV, JSON или YAML);
  • Объединить эти данные в вашу базу данных при инициализации вашего приложения, при условии, что они не существуют.

Я делаю что-то подобное в некоторых проектах.Однако я не буду выполнять слияние автоматически: я бы лучше использовал файл db/seeds.rb и задачу rake db:seed:

if State.count == 0
  State.transaction do
    CSV.foreach("#{::Rails.root}/db/seed_data/states.csv", 'r') do |row|
      code, acronym, name = *row
      State.create! code: code, acronym: acronym, nane: name
    end
  end
end

В этом коде я загружаю данные из локального файла, новы можете легко перейти на удаленный файл, используя Net::HTTP.

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