代码之家  ›  专栏  ›  技术社区  ›  Gutzofter

我的主钥匙怎么了?

  •  2
  • Gutzofter  · 技术社区  · 15 年前

    我用的是轨道2.3.4

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

    当我查看开发数据库时,主键没有问题。

    使用MySQL。

    编辑:看起来我的schema.rb文件已更改:id=>false应为true。什么生成这个文件?数据库迁移?

    [编辑]生成schema.rb文件的实际机制是什么?

    3 回复  |  直到 15 年前
        1
  •  1
  •   knoopx    15 年前

    执行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
    
        2
  •  1
  •   tsdbrown    15 年前

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

    我通常运行db:test:clone只要对该方案进行了更改,这就确保测试数据库始终与当前环境保持一致。也许可以尝试删除数据库并从迁移中重新创建它,然后运行克隆。在此之后,架构是否仍显示:id=>false?如果可以,您可以发布正在创建相关表的迁移。

        3
  •  1
  •   btelles    15 年前

    如果你使用“重置”,那么“db:test:prepare”,你很可能会得到你期待的结果。 像这样:

    rake db:reset
    rake db:test:prepare
    

    这将:

    • 根据最新迁移重新创建dev数据库
    • 基于migrations/dev数据库重新创建schema.rb文件
    • 基于schema.rb文件重新创建测试数据库。