Rake-задачи для нескольких баз данных с разными схемами - PullRequest
9 голосов
/ 23 февраля 2011

Я работаю над приложением Rails 3 с несколькими базами данных.Каждая база данных имеет свою схему (и в производстве находятся в разных местах).Я настроил приложение для общения с разными базами данных, например:

database.yml

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: main_development
  pool: 5
  username: someuser
  password: somepassword
  socket: /tmp/mysql.sock

other_development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: other_development
  pool: 5
  username: someuser
  password: somepassword
  socket: /tmp/mysql.sock

models / other_base.rb

class OtherBase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "other_#{Rails.env}"
end

models / some_model.rb

class SomeModel < OtherBase
  # Regular stuff here
end

Теперь это отлично работает для веб-приложения, но не очень хорошо для запуска задач rake, включая тесты (приборы не загружаются правильно).Есть ли драгоценный камень для этого?Любая помощь приветствуется.

Также было бы неплохо создать файл schema.rb, который мог бы обрабатывать различные схемы для разных БД, то есть позволил бы мне делать такие вещи, как rake db: create или db:настройте его и создайте несколько баз данных со схемой, специфичной для базы данных.

Ответы [ 4 ]

3 голосов
/ 07 августа 2013

Я считаю использование сред недопустимым взломом в этом случае. Вы хотите иметь две базы данных в одной среде.

Пока я сам изучал этот вопрос, я натолкнулся на суть пользователя github rafaelchiti . К сожалению, он удалил оригинальную сущность. Вы можете найти копию здесь .

1 голос
/ 23 января 2016

Вы можете попробовать использовать осьминог gem (https://github.com/thiagopradi/octopus),, он помогает вам настроить несколько баз данных и совместим с Rails 3.2 и Rails 4. С этим гемом вы можете легко указать базу данных, для которой вы хотите запустить миграцию.

1 голос
/ 23 июня 2011

У меня возникла та же проблема, и, потратив полчаса на поиск плагина 'loopy_multiple_database', я в конце концов пришел к выводу, что он исчез с лица сети и обратился к исправлению обезьяны в рейк-задачах Rails .Единственная задача, которую я хотел исправить, была db:migrate, но тот же (некрасивый) процесс позволил бы вам исправлять и другие задачи.

В Rails 3 добавьте, создайте файл db_migrate_override.rake (любой * .rake).имя будет делать) в lib/tasks вроде так:

Rake::TaskManager.class_eval do
  def remove_task(task_name)
    @tasks.delete(task_name.to_s)
  end
end

def remove_task(task_name)
  Rake.application.remove_task(task_name)
end

namespace :db do
  remove_task 'db:migrate'
  desc "Migrate the database (options: VERSION=x, SRCDIR=path, VERBOSE=false)."
  task :migrate => :environment do
    srcdir = (ENV["SRCDIR"] || "db/migrate/")
    ActiveRecord::Migrator.migrate(srcdir, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
    Rake::Task["db:schema:dump"].invoke if (ActiveRecord::Base.schema_format == :ruby && ENV['SRCDIR'].nil?)
  end
end

Тогда вы можете запустить

rake db:migrate RAILS_ENV=other_development SRCDIR=db_other/migrate
0 голосов
/ 23 февраля 2011

Вы можете попробовать плагин для нескольких баз данных .Кажется, можно легко назначать разные конфигурации граблей

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