Ruby Sequel中的rake db:schema:dump和rake db:schema:load等效
我试着看完了源代码和文档,但在一个失落的早晨之后,我放弃了:与此同时,似乎在Ruby Sequel中的rake db:schema:dump和rake db:schema:load等效,ruby,sequel,Ruby,Sequel,我试着看完了源代码和文档,但在一个失落的早晨之后,我放弃了:与此同时,似乎在SchemaDumper中没有做出足够的假设,同时没有SchemaLoader,接下来是sequel命令源代码,似乎它到目前为止都没有迁移信息(因为它没有“到目前为止的迁移”)结果文件中的信息类型) 这样做的动机是测试中的迁移失败(Sequel认为表不在那里,但它们在迁移到新版本和检查挂起的迁移检查失败时都会中断)-以及以前的经验,即从历史开始到今天运行所有迁移通常是建立数据库的一种糟糕方式 到目前为止,我已经做到了:
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
通常情况下,加载
会失败,因为迁移器
会加载一系列假设,从按特定顺序为其提供一个装满文件的文件夹开始,然而,这显然正是sequel-m
和sequel-d
根据当前源代码应该做的事情,而sequel-m
和sequel-d
组合显然是您在进行模式转储和模式加载时应该使用的
有什么想法吗?我想你误解了Sequel模式转储和加载的要点。只有当您有一个现有数据库并且希望从中生成迁移时,才应该使用模式转储,以查看存在哪些表/列,或者加载到一个空数据库中。加载架构转储程序转储的迁移只应在空数据库上完成 如果您已有一个非空的现有测试数据库(即,以前的迁移已应用于该数据库),则不应使用架构转储和加载,只应在测试数据库上运行迁移器。一般来说,最好在迁移开发数据库之前迁移测试数据库,这样您就可以运行测试并查看迁移是否破坏了任何东西 如果数据库为空,则从一开始就必须运行所有迁移。如果您迁移测试数据库的方式与迁移开发和生产数据库的方式类似,则通常一次只应用一次迁移 请注意,模式转储程序只处理可能的一小部分内容,并且只在最简单的情况下正常工作。它不处理转储视图、函数、触发器、部分/函数索引和一系列其他内容。对于除最简单的情况外的所有情况,请使用数据库工具转储和加载模式