2013-07-28 21 views
1

在Rails3中正确准备测试数据库时出现了一个奇怪的问题。未正确准备Rails测试数据库

在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的两个开发和测试数据库

这是某种错误的?

编辑

  • 我的意思是开发数据库。抱歉。

回答

0

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

如果在模式中将id定义为INT,并且在开发环境中没有待定迁移,则需要使用rake db:migrate:redo重新运行迁移。

0

您具体说生产数据库,这让我怀疑是否在开发环境中运行迁移。 Imho rake db:test:prepare创建了您的开发数据库的副本,因此请确保您的所有迁移都在开发中运行(我们在没有开发数据库的构建计算机上遇到了问题)。为了确保您的测试数据库的当前模式中创建,您还可以使用

RAILS_ENV=test rake db:reset 

这将下降,并使用schema.rb文件重新创建数据库。

+0

对不起。我是指发展数据库。问题是'schema.rb'包含int'id',并且只有迁移具有'change_column',这会改变id-> varchar。 – sebast26