【问题标题】:rake db:schema:dump and rake db:schema:load equivalent in Sequelrake db:schema:dump 和 rake db:schema:load 在 Sequel 中等效
【发布时间】:2018-01-17 10:38:21
【问题描述】:

我尝试按照源代码和文档进行操作,但在一个迷失的早晨之后我放弃了:同时好像在 SchemaDumper 中没有做出足够的假设,同时没有 SchemaLoader并遵循sequel 命令源代码,它似乎破坏了迄今为止的迁移信息(因为它在结果文件中没有“迄今为止的迁移”类型的信息)。

这样做的动机是在测试中迁移失败(Sequel 认为表不存在,但它们在迁移到新版本时会中断,并且检查挂起的迁移检查失败) - 以及之前运行的经验从历史开始到今天的所有迁移通常都是建立数据库的坏方法。

到目前为止,我已经得到了这个:

namespace :schema do

  task :dump => :migrations_environment do
    schema = without_sequel_logging{ DB.dump_schema_migration }
    File.open("db/schema.rb", 'w') {|f| f.write(schema) }
  end

  task :load => :migrations_environment do
    Sequel::Migrator.run(DB, "db/schema.rb")
  end

end

通常load 会失败,因为Migrator 会做出很多假设,首先会以特定顺序为它提供一个充满文件的文件夹,但这显然正是sequel -msequel -d应该根据当前的源代码执行 - sequel -msequel -d 组合显然是您想要进行架构转储和架构加载时应该使用的。

有什么想法吗?

【问题讨论】:

    标签: ruby sequel


    【解决方案1】:

    我认为您误解了 Sequel 的模式转储和加载的要点。仅当您拥有现有数据库并希望从中生成迁移时,才应使用模式转储,以查看存在哪些表/列,或加载到空数据库中。仅应在空数据库上加载由模式转储器转储的迁移。

    如果您已经有一个非空的现有测试数据库(即之前的迁移已应用到它),您不应该使用模式转储和加载,您应该只在测试数据库上运行迁移器。一般来说,最好在迁移开发数据库之前迁移测试数据库,这样您就可以运行测试并查看迁移是否会破坏任何内容。

    从一开始就必须运行所有迁移的唯一时间是如果您有一个空数据库。如果您迁移测试数据库的方式与迁移开发和生产数据库的方式类似,则通常一次只应用一次迁移。

    请注意,模式转储器只处理一小部分可能的情况,并且只能在最简单的情况下正常工作。它不处理转储视图、函数、触发器、部分/功能索引以及一系列其他事情。除了最简单的情况外,使用数据库工具转储和加载模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 2011-08-19
      • 2011-09-22
      • 2012-01-11
      • 2011-06-24
      • 2010-11-01
      相关资源
      最近更新 更多