Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何保持Rails 4测试数据库的同步?_Ruby On Rails_Ruby On Rails 4_Rspec Rails_Rails Migrations - Fatal编程技术网

Ruby on rails 如何保持Rails 4测试数据库的同步?

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

我有:

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

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