Ruby on rails 保持测试和开发数据库与rake同步
使用Rails 4.2,我想在迁移中使用以下行向Postgres数据库中的用户ActiveRecord类添加年龄字段:Ruby on rails 保持测试和开发数据库与rake同步,ruby-on-rails,Ruby On Rails,使用Rails 4.2,我想在迁移中使用以下行向Postgres数据库中的用户ActiveRecord类添加年龄字段: add_column :users, :age, :integer 然后我显然运行了bin/rakedb:migrate。后来,我决定将此字段设置为字符串字段,因此回滚了迁移并更改了迁移,如下所示: add_column :users, :age, :string 然后又迁移了。在我的开发数据库中一切正常,但我的测试数据库似乎保留了旧的数据类型。这是我使用psql并运行se
add_column :users, :age, :integer
然后我显然运行了bin/rakedb:migrate。后来,我决定将此字段设置为字符串字段,因此回滚了迁移并更改了迁移,如下所示:
add_column :users, :age, :string
然后又迁移了。在我的开发数据库中一切正常,但我的测试数据库似乎保留了旧的数据类型。这是我使用psql并运行select column_name,data_type from information_schema.columns得到的结果,其中table_name='users'
发展中:
age | character varying
在测试中:
age | integer
这是故意的还是错误?当您运行db:migrate时,如果您不指定环境,它将只为您的开发数据库运行迁移。如果您执行db:migrate RAILS\u ENV=test,它将针对您的测试数据库运行迁移。当您运行db:migrate时,如果您不指定环境,它将仅针对您的开发数据库运行迁移。如果您执行db:migrate RAILS\u ENV=test,它将针对您的测试数据库运行迁移。首先,在应用迁移后更改迁移很少是一个好主意
但是,既然已经存在了,那么有两种可能的方法来实现这一点:回滚并迁移测试数据库,或者只加载测试数据库的模式。我推荐第二种解决方案:just RAILS\u ENV=test rake db:schema:load,然后就可以开始了。首先,在应用迁移之后更改迁移很少是个好主意
但是,既然已经存在了,那么有两种可能的方法来实现这一点:回滚并迁移测试数据库,或者只加载测试数据库的模式。我推荐第二种解决方案:just RAILS\u ENV=test rake db:schema:load,然后就可以开始了。Aha!问题在于,下面的ActiveRecord功能不支持回滚迁移:
ActiveRecord::Migration.maintain_test_schema!
在本期中有详细介绍,这似乎将在Rails 5中得到修复。Aha!问题在于,下面的ActiveRecord功能不支持回滚迁移:
ActiveRecord::Migration.maintain_test_schema!
在本期中有详细介绍,Rails 5中似乎会对此进行修复。是的,这就是我在第二个建议中所做的,但我觉得奇怪的是,如果要支持迁移两个数据库,就不支持将它们正确回滚。我想我要用Rails打开一个支持查询,当然可以使用Rails\u ENV=test rake db:rollback db:migrate。但在另一个环境中隐式回滚测试可能是意外行为。好的,但是rake db:migrate在测试环境数据库中隐式创建了列。难道它不会隐式地回滚吗?是的,这就是我在第二个建议中所做的,但我觉得奇怪的是,如果要支持迁移两个数据库,就不支持正确地回滚它们。我想我要用Rails打开一个支持查询,当然可以使用Rails\u ENV=test rake db:rollback db:migrate。但在另一个环境中隐式回滚测试可能是意外行为。好的,但是rake db:migrate在测试环境数据库中隐式创建了列。难道不希望它也隐式地回滚它吗?