TL; DR
如果我错过了一些迁移文件,并且我想重新创建数据库,是否可以转储架构/结构并删除schema_migrations
表的所有行,这样我就不会有待处理迁移错误?
长版
我将使用的一些术语:
establish_connection
行。警告:我将描述一个有很多违反Rails最佳做法的应用,其中大部分内容我都不知道原因。我的目标是让事情回到正轨。
我最近接手了一个使用多个数据库的应用程序的开发。主数据库(不是 appname_development )通过以下方式进行操作 - 有一个单独的Rails应用程序,仅用于通过迁移操作数据库。因此,例如,如果您想添加模型,则转到另一个应用程序,创建迁移,运行它,在主应用程序中,您只需使用代码创建模型文件。在主应用程序中有一些迁移,因为还有一些模型存储在默认数据库中( appname_development )。最重要的是,一些开发人员直接通过psql
更改了数据库。
我想将主数据库设为默认数据库,因此我更改了database.yml
,以便development
指向主数据库,并从模型中删除了establish_connection
行。此外,我转而使用structure.sql
而不是schema.rb
,因为数据库有很多存储过程。
但是,我遇到的问题是,schema_migrations
表包含很多行,我没有相应的迁移,应用报告有pending migrations
。我有很多条目,我没有相应的文件:
Status Migration ID Migration Name
--------------------------------------------------
up 20131007211329 ********** NO FILE **********
up 20131007211336 ********** NO FILE **********
up 20131007211343 ********** NO FILE **********
up 20131007211349 ********** NO FILE **********
up 20131007211355 ********** NO FILE **********
up 20131007211402 ********** NO FILE **********
up 20131007211409 ********** NO FILE **********
up 20131007211415 ********** NO FILE **********
up 20131007211422 ********** NO FILE **********
up 20131007211428 ********** NO FILE **********
up 20131007211436 ********** NO FILE **********
现在,我的问题是 - 没关系,如果我只是删除这些行并且"开始清理"。另外,如果我运行rails g migration
,是否会生成正常迁移,是否会创建schema_migrations
表中的相应行?
最后一点想法 - 对我来说,目前不能通过rake db:reset
简单地重新创建数据库,因为有大约5GB的数据。我现在通常应该使用seeds.rb
文件,但是现在我没有时间深入了解项目的细节并生成种子数据,但必须使用生产数据。我的想法如下:
schema_migrations
表格,以便我没有待处理的迁移错误; rake db:create
rake db:structure:load
以便我拥有db结构,自定义类型和存储过程; psql
; 提前感谢您提供相关信息,我愿意提供任何其他信息。