你如何保持Rails 4测试数据库同步?

时间:2016-05-25 21:07:41

标签: ruby-on-rails ruby-on-rails-4 rspec-rails rails-migrations

我有:

ActiveRecord::Migration.maintain_test_schema!

但是当我用新的迁移改变我的dev db时,我得到了:

Migrations are pending. To resolve this issue, run:

    bin/rake db:migrate RAILS_ENV=test

当我尝试它时,它假定测试数据库是空白的并且想要运行迁移#1但是错误。

它类似于测试数据库中缺少的schema_migrations表。

3 个答案:

答案 0 :(得分:1)

好吧,我终于找到了解决问题的方法:

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

注意我在that特定订单的3100之前运行了3099。我必须迁移测试数据库FIRST,然后我可以迁移dev。然后我的测试仍然正常。如果我走向另一个方向,我就会遇到上述问题。

答案 1 :(得分:0)

只要在测试配置中声明ActiveRecord::Migration.maintain_test_schema!,您就不需要管理测试数据库的迁移(例如,如果您使用RSpec,则不需要rails_helper / spec_helper):

<强> 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代替直接运行迁移。

答案 2 :(得分:0)

我今天遇到了这个问题:

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

之所以这是因为我有一个迁移创建一个表,并试图在我重命名的列上创建和索引,所以[null]上的索引出现在模式中,这显然是开发数据库可以处理的,但测试数据库不能没有一些shenaigans参与如何迁移数据库...每次我需要迁移我必须运行

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

为了让dev和测试DB工作到我可以运行测试的程度。最后,我在db/schema.rb中的现有表中的空列上追踪索引,在表创建迁移中找到索引命令并将其擦除是一件相当简单的事情。之后,只需

即可将数据库恢复原状
rails db:migrate
rails db:seed