【问题标题】:Merging development data into production data将开发数据合并到生产数据中
【发布时间】:2011-03-31 20:22:54
【问题描述】:

我们上周部署了一个应用程序。问题是我们有一些想要迁移到生产环境的开发数据,但生产数据库已经在使用中。所以仅仅导入和导出 SQL 会带来 ID 不再匹配的问题。

现在,我考虑过将所有数据急切加载到基础对象中,但没有一个基础对象这样的东西。有四个对象只有 has_many 关联,很多对象有多个 belongs_to 关联。

还有其他的导出和导入方法可以用来实现我们想要的吗?

【问题讨论】:

    标签: ruby-on-rails database production


    【解决方案1】:

    一种方法可能是将开发数据转储到 yaml(this plugin does that 可能还有其他方法可以解决问题),然后使用 db/seeds.rb 编写脚本加载其内容并使用 rails 模型使用 rake db:seed 在生产数据库上重新创建它们

    rake db:seed 不会加载您的数据(它只会加载 db/seeds.rb,请参阅源代码 herehere),但请务必先备份您的数据 :)

    我建议先玩一个沙盒应用程序和数据库克隆,然后再继续在生产环境中运行它。

    【讨论】:

    • 我不确定,但我认为 DB Seed 不适用于现有数据。我会担心你会丢失现有数据。
    • rake db:seed 本身不会处理任何现有数据,它只会加载 db/seeds.rb,这只是一个可以访问应用程序环境的脚本的地方。没有什么可以阻止它加载 yaml 夹具。这是任务的来源:github.com/rails/rails/blob/master/activerecord/lib/…
    • 在任何情况下,请务必备份您的数据 :) 我建议您先玩一个沙盒应用程序和数据库克隆,然后再继续在生产环境中运行它。首先在控制台中运行语句有助于将脚本放在一起
    • 我看过 yaml_db,但是将 DB 导出到 YAML 并没有在导入时保留任何关系,所以我们把它扔掉了。写一个种子脚本(我们写了一个 rake 任务,但想法是一样的)太复杂了。我们必须保留具有旧 ID 和新 ID 的数组,比较它们并相应地更改它们。它只是没有用。
    • 嗯,也许会看到您的模型,或者它们的样本,脚本将帮助我们更好地了解您所面临的问题。顺便说一句,刚刚找到了另一个线程,并提出了一些有趣的建议:stackoverflow.com/questions/169240/merging-rails-databases
    【解决方案2】:

    将开发数据导出为 CSV、yaml、XML 或您想要使用的任何格式。然后你可以选择做什么:

    如果只导入一次数据,则可以使用迁移从指定文件加载数据。在将文件签入源代码管理时,请务必将文件包含在迁移中。

    使用控制台(脚本/控制台生产)加载数据并手动输入命令。这可能是一种更好的方法,因为您可以检查输入的数据并根据需要进行调整。

    如果您要多次执行此操作,请编写一个 rake 任务,当给定文件名或其他标识符时,将数据加载到数据库中。

    【讨论】:

    • 我认为我们的数据对于这个解决方案来说有点太复杂了。例如,我们有一个包含 250 条记录的模型,其中有 8 个 belongs_to 关联。在应用程序本身中重新创建数据比在控制台中手动创建数据更容易。不过你确实给了我一个想法,我稍后会详细说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2012-04-15
    相关资源
    最近更新 更多