У меня есть приложение Rails 4, которое использует две базы данных MySQL (первичную, вторичную). Обе базы данных настроены для среды разработки, производства и тестирования в файле database.yml
:
development:
...
database: primary
...
production:
...
database: primary
...
test:
...
database: primary
...
secondary_development:
...
database: secondary
...
secondary_production:
...
database: secondary
...
secondary_test:
...
database: secondary
...
На данный момент у меня есть только одна модель, которая хранится во вторичной базе данных. Ниже приведен код миграции, который создает таблицу для этой модели:
class CreateTags < ActiveRecord::Migration
ActiveRecord::Base.establish_connection "secondary_#{Rails.env}"
def change
create_table :tags do |t|
t.string :name
t.integer :account_id
t.timestamps
end
end
end
Когда я запускаю rake db:migrate
, таблица во вторичной базе данных создается правильно. Но когда я запускаю rake db:migrate
во второй раз, он показывает мне ошибку table already exists
, которая, я думаю, связана с тем, что задача rake добавляет версию миграции в таблицу версий первичной базы данных. Я пока игнорирую это.
Но когда я запускаю какой-нибудь модульный тест с использованием rake test TEST=test/path_to_test_file.rb
, он показывает мне ошибку Tags table does not exist
во вторичной БД. Я проверил журналы и обнаружил, что таблица Tags
создана, НО в ПЕРВИЧНОЙ базе данных, что неверно.
Итак, вкратце, как изменить код миграции, чтобы таблица Tags
всегда создавалась во вторичной БД?
Я пытался:
Но у меня не работает :(
ОБНОВЛЕНИЕ 1: на основании предложения @ User089247 я попытался запустить RAILS_ENV = test rake db: create и RAILS_ENV = test rake db: migrate. Он говорит, что моя первичная база данных уже создана, что верно, но ничего не говорит о моей вторичной базе данных, потому что вторичная БД имеет отдельную конфигурацию secondary_test
. Насколько я понимаю, должно быть возможно создать пользовательскую задачу рейка (или переопределить существующую), но тогда эти таксы должны использоваться rake test
. Является ли это возможным ? Или я чего-то упускаю?
$ RAILS_ENV=test rake db:create
, а затем$ RAILS_ENV=test rake db:migrate
? - person Surya   schedule 27.10.2014