Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 保持测试和开发数据库与rake同步_Ruby On Rails - Fatal编程技术网

Ruby on rails 保持测试和开发数据库与rake同步

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

使用Rails 4.2,我想在迁移中使用以下行向Postgres数据库中的用户ActiveRecord类添加年龄字段:

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在测试环境数据库中隐式创建了列。难道不希望它也隐式地回滚它吗?