2009-09-15 46 views
2

我正在使用rails 2.3.4我的主键发生了什么?

当我执行rake db时:test:准备创建的id字段不是主键并自动递增。

当我看到发展数据库没有主键的问题。

使用MySQL。

编辑:它看起来像我的schema.rb文件发生了改变:ID =>假的应该是真实的。什么产生这个文件?数据库迁移?

[编辑]什么是产生schema.rb文件中的实际力学?

回答

1

当您执行rake任务时,如果未指定任何环境,则会将任务执行到默认环境。

您的测试和开发数据库之间可能有不同的模式版本。

rake db:reset #drops and created the database for current environment 
rake db:reset:all #drops and creates database for all environments 
rake db:migrate #migrates the schema for the current environment 
rake db:migrate RAILS_ENV=test #migrates the schema for the test environment 

如果我没有错的(我记得现在)

rake db:migrate #applies the migrations and dumps the schema to db/schema.rb file 
rake db:schema:dump #dumps the actual state of your current environment schema into db/schema.rb file 
1

嘿,我看了一下这个问题,昨天,看到没有人回答还没有,所以我会尽力帮助,说实话,我不知道为什么正在发生主要是因为我没有真正使用的“准备”任务。当针对空数据库运行迁移时,会创建schema.rb。

我正常运行分贝:测试:只要修改过该计划克隆,这样可确保您的测试数据库始终处于在线与您的当前环境。也许尝试删除数据库并从您的迁移中重新创建它,然后运行克隆。在这之后,模式仍然显示:id => false?如果是这样,你可以发布正在创建相关表的迁移。

+0

但是当你需要Rspec它使用分贝:测试:准备。真正的问题是scema.rb如何改变? – Gutzofter 2009-09-16 17:00:22

+0

是的。那么曾经好吗?如果你回滚你的开发。数据库到版本0,然后再次备份它在模式中设置的是什么?它是否还有:id => false。这只发生在一张桌子上还是全部? – tsdbrown 2009-09-16 20:15:02

+0

开发中没有主键。我相信这是来自schema.rb。什么产生一个新的schema.rb? – Gutzofter 2009-09-17 07:34:41

1

如果使用“重置”,然后“分贝:测试:准备”,你可能会得到的结果你”正在向前看。 像这样:

rake db:reset 
rake db:test:prepare 

这将:

  • 重新根据您的最新迁移的开发数据库
  • 重建基于迁移的/ dev数据库上的schema.rb文件
  • 重建基于schema.rb文件测试数据库。