1

我在 Rails3 中正确准备测试数据库时遇到了奇怪的问题。

在 schema.rb 我有:

create_table "sites", :force => true do |t|
  t.string   "ldap_dn",     :null => false
  t.string   "address"
  t.string   "phone"
  t.string   "description"
  t.datetime "created_at",  :null => false
  t.datetime "updated_at",  :null => false
end

然后在我的一次迁移中,我有:

change_column :sites, :id, :string, :limit => 255, :primary_key => true

现在,在我拥有之后的开发数据库中rake db:migrate

id VARCHAR(255) PK

rake db:test:prepare但是在我拥有之后在测试数据库中

id INT(11) PK AI

在日志文件 ( test.log) 中,我可以看到所有迁移都已执行。

我用:

  • 导轨 3.2.13
  • mysql 用于开发和测试数据库

这是某种错误吗?

编辑

  • 我的意思是开发数据库。对不起。
4

2 回答 2

0

检查db/schema.rb你那里有什么。rake 任务 db:test:prepare(和 db:test:load)只是从您的模式文件重新创建数据库,在某些情况下(当您运行迁移然后在开发过程中更改它时)它可能与 schema_migrations 表不一致。

如果您在架构中将 id 定义为 INT 并且您的开发环境中没有挂起的迁移,那么您需要使用rake db:migrate:redo.

于 2013-07-28T14:33:29.877 回答
0

您特别说生产数据库,这让我想知道您是否也在开发环境中运行了迁移。Imhorake db:test:prepare创建了您的开发数据库的副本,因此请确保您的所有迁移也在开发中运行(我们在构建机器上遇到了问题,没有开发数据库)。为确保您的测试数据库是为当前模式创建的,您还可以使用

RAILS_ENV=test rake db:reset

schema.rb这将使用该文件删除并重新创建数据库。

于 2013-07-28T14:48:47.320 回答