1

у меня есть:Как вы храните Rails 4 test db в синхронизации?

ActiveRecord::Migration.maintain_test_schema! 

, но когда я изменить мой Dev дб с новой миграцией я получаю:

Migrations are pending. To resolve this issue, run: 

    bin/rake db:migrate RAILS_ENV=test 

и когда я пытаюсь что предполагает тест БД является пустым, и хочет, чтобы запустить миграцию # 1, но эти ошибки.

Это похоже на то, что таблицы schema_migrations отсутствуют на тестовом db.

ответ

1

ну я, наконец, нашел способ обойти эту проблему:

3099 rake db:migrate RAILS_ENV=test 
3100 rake db:migrate 

уведомление я выбежала 3099, прежде чем 3100 в that определенном порядке. Мне нужно перенести тест db FIRST, затем я могу выполнить миграцию dev. Тогда мои тесты все еще работают нормально. Если я пойду в другом направлении, я получу проблему, описанную выше.

0

Вы не должны управлять миграции в тестовой базе данных до тех пор, как ActiveRecord::Migration.maintain_test_schema! объявлен в вашей тестовой конфигурации (например, rails_helper/spec_helper, если вы используете RSpec):

rails_helper.rb:

require File.expand_path('../../config/environment', __FILE__) 

#... 

ActiveRecord::Migration.maintain_test_schema! 

#... 

RSpec.configure do |config| 

Однако, если вы хотите настроить вашу тестовую базу данных с помощью файла schema.rb, то вы можете запустить rake db:test:prepare вместо запуска миграции непосредственно.

+0

Я согласен я «не должен» нужно управлять миграции для тестовой БД, если у меня есть 'ActiveRecord :: Migration.maintain_test_schema!', Но все же я все еще получаю эта ошибка. Любая идея, как отлаживать почему? –

+0

Вы случайно используете чистую версию базы данных 1.4.0? –

+0

no just normal mysql –

0

Я с этой проблемой сегодня:

Rails 5.1.2 
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] 

Это было вызвано тем, что у меня была миграция, создавая таблицу, и пытается создать и индекс на колонке я переименовано, поэтому индекс на [нуль] появлялся в схеме, которая, по-видимому, может иметь дело с дебютом db, но тест db не может без каких-либо шенеганов участвовать в том, как db мигрирует ... Каждый раз, когда мне нужно было мигрировать, мне приходилось запускать

rails db:drop 
rails db:migrate RAILS_ENV=test 
rails db:migrate 
rails db:seed 

Чтобы получить как dev, так и тестовую БД, работающую до точки wher Я мог бы запустить тесты. В конце концов я отслеживал индекс в нулевом столбце в существующей таблице в db/schema.rb, было довольно просто найти команду индекса в миграции создания таблицы и уничтожить ее. После того, что DB может быть возвращен в форме только с

rails db:migrate 
rails db:seed