我的情况是我们在SQL Server上有多个模式,我们需要能够执行模式:转储和迁移。一个模式适用于我们的新Rails应用程序,另一个模式适用于我们依赖的遗留系统。
运行rake db:schema:dump时,我们在schema.rb文件中正确创建了新的模式表。旧架构表不会以schema.rb结尾。我想知道其他人是如何处理这个问题的。
我给出的另一个考虑因素是,因为我们的遗留模式表是相当静态的,只需将这些表添加到单独的文件中,然后为rake db:schema创建一个before hook,然后在该文件之前运行该文件。 schema.rb。 rake db是否有一个前挂钩:schema:load;如果那是什么?
答案 0 :(得分:1)
以下是我最终解决此问题的方法。
我在hooks.rake中添加了一个挂钩到架构加载和架构转储中的挂钩,如下所述。
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的模式之外的表。在我的情况下,这是我当前应用程序架构下的所有内容。在我的情况下,我在app的架构之外想要的一切都在add_tables中指定,所以这些表也不应该在schema.rb中结束。
答案 1 :(得分:0)
有一些关于使用Postgres的多租户数据库的资料,我之前引用的是http://blog.jerodsanto.net/2011/07/building-multi-tenant-rails-apps-with-postgresql-schemas/。还有一个宝石(https://github.com/influitive/apartment),它也可能是灵感,甚至是你的解决方案。