如何为旧数据库创建迁移?

时间:2008-10-10 04:49:10

标签: ruby-on-rails migration

我目前正在使用在我意识到Rails存在之前设计的数据库开发Rails应用程序 我目前已经创建了一些迁移,以向现有表添加一些新表和新列。

我希望迁移能够重新创建完整的数据库。

我应该遵循哪些步骤?
我应该手动创建所有迁移吗?

编辑:我对不在数据库内容中的数据库模式感兴趣

3 个答案:

答案 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是动态生成的 - 如果从一个表移动到另一个表,请确保所有外键都正确更新。

编写一个脚本,从旧数据中重新创建整个数据库。如果您发布了数据库方案和新的数据库方案,我很乐意为您提供进一步的帮助:)

相关问题