Rails通过现有数据库进行迁移

我正在创建一个新的Rails 3.1应用程序。 我希望这个新的应用程序重用现有的数据库(由之前的rails 2应用程序创建)。

我创建了定义模型的新应用程序,它重用了数据库中的一些现有数据。

在开发和测试阶段,一切正常,因为它在一个干净的工作表数据库上运行,但在尝试部署到生产时,我得到的消息如下:

PGError: ERROR: column "email" of relation "users" already exists *** [err :: localhost] : ALTER TABLE "users" ADD COLUMN "email" character varying(255) DEFAULT '' NOT NULL 

但是我在我的迁移中认为是这样的

 class DeviseCreateUsers  false t.recoverable t.rememberable t.trackable t.timestamps end end 

如何使db:migrate忽略已存在的内容并仅更改新内容和/或新类型?

我在stackoverflow上看到了类似的问题,但没有人回答这个问题。 谢谢你的回答。

如果您使用的是现有数据库,则不应尝试通过迁移覆盖它,您应该复制schema.rb中的现有数据库,然后从那里向前迁移,只添加已更改的字段。

我采取的一种方法是创建一个新模型(假设您还没有任何迁移 – 如果你这样做,请小心删除它们),例如“rails generate model user”。 除其他外,生成器为该模型创建数据库迁移。 运行db migrate rails时,rails会创建users表并根据现有数据库的当前状态创建schema.rb。 从那时起,后续迁移将基于schema.rb以及所做的任何新更改。