我遇到的情况是,我们在 SQL Server 上有多个模式,我们需要能够对其进行模式:转储和迁移。一个模式用于我们的新 Rails 应用程序,另一个模式用于我们依赖的遗留系统。
当运行 rake db:schema:dump 时,我们的新模式表在 schema.rb 文件中正确创建。遗留模式表不会以 schema.rb 结束。我想知道其他人是如何处理这个问题的。
我对此给出的另一个考虑是,因为我们的遗留模式表是相当静态的,所以将它们添加到一个单独的文件一次,然后为 rake db:schema:load 创建一个 before 钩子(Hook),它将在架构.rb。 rake db:schema:load; 是否有一个 before hook?如果是,那是什么?
最佳答案
这是我最终解决这个问题的方法。
我在 hooks.rake 中添加了一个 before Hook 到模式加载和模式转储中,如下所述。
namespace :project do
namespace :db do
task :before_schema_load => :environment do
add_tables
end
task :before_schema_dump => :environment do
add_ignored_tables
end
end
end
Rake::Task['db:schema:dump'].enhance(['project:db:before_schema_dump'])
Rake::Task['db:schema:load'].enhance(['project:db:before_schema_load'])
在 add_tables 功能中,我已经为我的遗留表手动创建了本质上等效于静态 schema.rb 的内容,因为它们很少更改(可能永远不会)。
在 add_ignored_tables 中,我已将表添加到 ActiveRecord::SchemaDumper.ignore_tables 数组以指示我不想转储到 schema.rb 的模式之外的表。在我的例子中,这是不在我当前应用程序架构下的所有内容。在我的情况下,我想要在我的应用程序架构之外的所有内容都在 add_tables 中指定,因此这些表也不应该在 schema.rb 中结束。
关于ruby-on-rails - Rails rake 数据库 :schema:dump against SQL Server database with multiple schemas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386664/