Ruby on rails 如何保持Rails 4测试数据库的同步?
我有: 但是,当我使用新迁移更改dev db时,我得到了:Ruby on rails 如何保持Rails 4测试数据库的同步?,ruby-on-rails,ruby-on-rails-4,rspec-rails,rails-migrations,Ruby On Rails,Ruby On Rails 4,Rspec Rails,Rails Migrations,我有: 但是,当我使用新迁移更改dev db时,我得到了: ActiveRecord::Migration.maintain_test_schema! 当我尝试这样做时,它假设测试数据库为空,并希望运行迁移#1,但这会出错 就像测试数据库中缺少架构迁移表一样。只要ActiveRecord::Migration.Maintent\u test\u架构,您就不需要管理测试数据库的迁移在测试配置中声明(例如,如果使用RSpec,则为rails\u helper/spec\u helper): rai
ActiveRecord::Migration.maintain_test_schema!
当我尝试这样做时,它假设测试数据库为空,并希望运行迁移#1,但这会出错
就像测试数据库中缺少架构迁移表一样。只要
ActiveRecord::Migration.Maintent\u test\u架构,您就不需要管理测试数据库的迁移代码>在测试配置中声明(例如,如果使用RSpec,则为rails\u helper/spec\u helper):
rails\u helper.rb:
Migrations are pending. To resolve this issue, run:
bin/rake db:migrate RAILS_ENV=test
但是,如果要使用schema.rb
文件设置测试数据库,则可以运行rake db:test:prepare
,而不是直接运行迁移 我终于找到了解决问题的方法:
require File.expand_path('../../config/environment', __FILE__)
#...
ActiveRecord::Migration.maintain_test_schema!
#...
RSpec.configure do |config|
请注意,我以特定的顺序在3100之前运行3099。我必须先迁移测试数据库,然后才能迁移开发人员。然后我的测试仍然可以正常运行。如果我走另一个方向,我会遇到上述问题。我今天遇到了这个问题:
3099 rake db:migrate RAILS_ENV=test
3100 rake db:migrate
这是因为我进行了一次迁移,创建了一个表,并试图在我重命名的列上创建和索引,所以[null]上的索引出现在模式中,这显然是开发数据库可以处理的,但是测试数据库不能在没有一些Shenaigan参与的情况下迁移数据库。。。每次需要迁移时,我都必须运行
Rails 5.1.2
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]
为了让dev和testdb工作到可以运行测试的程度。最后,我在db/schema.rb
中的一个现有表中找到了空列上的索引,在表创建迁移中找到index命令并将其删除是一件相当简单的事情。在这之后,只需使用
rails db:drop
rails db:migrate RAILS_ENV=test
rails db:migrate
rails db:seed
我同意如果我有ActiveRecord::Migration.maintenance\u test\u schema,我“不应该”需要管理测试数据库的迁移代码>但我仍然得到那个错误。你知道如何调试原因吗?你是不是碰巧使用了database cleaner 1.4.0版?schema.rb(即ActiveRecord::schema.define(version:timestamp)
)中的时间戳是否与你的最新迁移相同?它们现在是同步的,但我下次遇到这个问题时会注意到。谢谢。刚刚添加了新的迁移,在dev上运行,schema.rb中的版本是正确的,但是我得到了“ActiveRecord::PendingMigrationError:迁移挂起。若要解决此问题,请在运行rake测试时运行:bin/rake db:migrate RAILS_ENV=test”
rails db:migrate
rails db:seed