我目前正在使用在我意识到Rails存在之前设计的数据库开发Rails应用程序 我目前已经创建了一些迁移,以向现有表添加一些新表和新列。
我希望迁移能够重新创建完整的数据库。
我应该遵循哪些步骤?
我应该手动创建所有迁移吗?
编辑:我对不在数据库内容中的数据库模式感兴趣
答案 0 :(得分:7)
当我们将PHP应用程序移植到rails时,我们遇到了这个问题。我们所做的与tomtoday的建议类似。首先,我们将rails配置指向当前数据库。然后我们做了一个rake db:schema:dump并将db / schema.rb文件复制到db / schema_base.rb之类的东西。然后,您进行第一次迁移加载该架构。例如:
class CreateTables < ActiveRecord::Migration
def self.up
`cp #{Rails.root}/db/schema_base.rb #{Rails.root}/db/schema.rb`
Rake::Task['db:schema:load'].invoke
end
def self.down
end
end
只需强迫这是第一次迁移,您就会开始。然后,您开始编写迁移以将数据库转换为更符合Rails方式。我们编写了迁移来正确重命名id列,外键关系,表名等 请记住,架构转储不支持外键约束和触发器(如果使用它们)。
答案 1 :(得分:3)
我认为这需要一些手工工作。
如果您的项目中没有文件rake db:schema:dump
,则可以通过运行db/schema.rb
开始。如果您一直在使用迁移,则可能已经有db/schema.rb
个文件。该文件将包含您为开发配置的数据库的ruby表示。获取另一个数据库的ruby表示在RAILS_ENV中传递给rake命令(即RAILS_ENV=production rake db:schema:dump
)
然后,您可以使用该schema.rb
文件作为起点来创建重新创建预先存在的表的新迁移。创建新的迁移文件时,请确保以其在其他迁移之前运行的方式命名它。
答案 2 :(得分:1)
简答:是的
答案很长:这取决于数据库的设置方式以及它与当前数据库的不同之处。另外,因为我假设ID是动态生成的 - 如果从一个表移动到另一个表,请确保所有外键都正确更新。
编写一个脚本,从旧数据中重新创建整个数据库。如果您发布了数据库方案和新的数据库方案,我很乐意为您提供进一步的帮助:)