我有:
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表。
答案 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