1

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

我想进行迁移以重新创建完整的数据库。

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

编辑:我对数据库模式感兴趣,而不是对数据库内容感兴趣

4

3 回答 3

7

当我们将 PHP 应用程序移植到 Rails 时,我们遇到了这个确切的问题。我们所做的与今天的建议类似。首先,我们将 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 列、外键关系、表名等。
请记住,如果使用外键约束和触发器,模式转储不支持它们。

于 2008-10-10T21:37:55.510 回答
3

我认为这将需要一些手动工作。

rake db:schema:dump如果您的项目中没有该文件,您可以从运行开始db/schema.rbdb/schema.rb如果您一直在使用迁移,您可能已经有一个文件。该文件将包含您为开发配置的数据库的 ruby​​ 表示形式。要获得另一个数据库的 ruby​​ 表示,请将 RAILS_ENV 传递给 rake 命令(即RAILS_ENV=production rake db:schema:dump

然后,您可以使用该schema.rb文件作为起点来创建重新创建预先存在的表的新迁移。创建新迁移文件时,请确保它的命名方式使其在其他迁移之前运行。

于 2008-10-10T18:38:13.703 回答
1

简短的回答:是的

长答案:这取决于数据库的设置方式以及与当前数据库的差异。另外,因为我假设 ID 是动态生成的 - 如果您从一个表移动到另一个表,请确保您的所有外键都已正确更新。

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

于 2008-10-10T04:54:04.033 回答