【问题标题】:Rails rake db:schema:dump against SQL Server database with multiple schemasRails rake db:schema:dump 针对具有多个模式的 SQL Server 数据库
【发布时间】:2013-01-01 10:33:14
【问题描述】:

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

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

我对此的另一个考虑是,因为我们的旧模式表是相当静态的,所以将它们添加到一个单独的文件中一次,然后为 rake db:schema:load 创建一个 before 挂钩,它将在架构.rb。 rake db:schema:load; 是否有一个 before 钩子?如果有,那是什么?

【问题讨论】:

    标签: ruby-on-rails ruby sql-server rake


    【解决方案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 中结束。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-25
        • 2010-12-05
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多