2

我的情况是我们在 SQL Server 上有多个架构,我们需要能够执行架构:转储和迁移。一种模式用于我们的新 Rails 应用程序,另一种模式用于我们依赖的遗留系统。

运行 rake db:schema:dump 时,我们的新模式表在 schema.rb 文件中正确创建。遗留模式表不会在 schema.rb 中结束。我想知道其他人是如何处理这个问题的。

我对此给出的另一个考虑是因为我们的旧模式表是相当静态的,因此将它们添加到一个单独的文件一次,然后为 rake db:schema:load 创建一个 before 挂钩,它将在 schema.rb 之前运行该文件. rake db:schema:load; 是否有一个 before 钩子?如果是这样,那是什么?

4

2 回答 2

1

这是我最终解决此问题的方法。

我在 hooks.rake 中添加了一个 before 钩子到模式加载和模式转储中,如下所述。

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 中结束。

于 2013-01-22T14:34:25.247 回答
0

有一些关于使用 Postgres 的多租户数据库的资料,我之前参考过的是http://blog.jerodsanto.net/2011/07/building-multi-tenant-rails-apps-with-postgresql-schemas/ . 还有一个gem(https://github.com/influitive/apartment),它也可能是灵感,甚至是你的解决方案。

于 2013-01-17T19:41:41.193 回答