【问题标题】:Using Postgres Schema with Ruby on Rails在 Ruby on Rails 中使用 Postgres 模式
【发布时间】:2019-02-19 14:27:39
【问题描述】:

我有一个单独的服务器,其中包含一个 Ruby on Rails API(DB 是 postgres),供多个不同应用程序使用。我正在考虑使用模式对每个应用程序需要的表进行排序,并有一个“通用”模式,其中包含应用程序将共享的表(用户、员工等)。每个应用程序架构大约有 10 个表,公共架构将包含大约 15 个。当前计划是让大约 3-5 个使用此 API 的应用程序都使用相同的公共表。

我的问题是,是否值得用 Ruby on Rails 实现 Postgres 模式?我一直在寻找有关该主题的一些资源,但似乎没有太多关于它的信息。在 2011/2012 年写了几篇文章,但没有更接近 2018 年。我一直在寻找的主要内容之一是如何使用 postgres 模式正确创建 rails 迁移。

我还阅读了一位用户的评论,称他们分别使用了 postgres 和 rails,但永远不会将它们结合使用。

使用模式来组织数据库感觉是个好主意,但如果需要大量手动数据库工作/维护,就不想走这条路。

谢谢,

【问题讨论】:

    标签: ruby-on-rails database postgresql schema


    【解决方案1】:

    我会建议你通过apartment gem。如果您使用 postgres,它对单数据库多模式有很好的支持。或者,如果您想自己实现所有内容,请查看此railscasts 插曲。你会知道如何处理它。

    【讨论】:

      【解决方案2】:

      这可以通过 Rails 轻松实现,但您必须覆盖 Rails 期望的默认表名以指向特定的 Schema:

      class YourSchemaRecord < ApplicationRecord
        self.table_name_prefix = 'name_of_your_schema.'
      end
      
      class SomeRecord < ApplicationRecord
      end
      
      class YourCommonSchemaRecord < ApplicationRecord
        self.table_name_prefix = 'public.'
      end
      
      class SomeCommonRecord < YourCommonSchemaRecord
      end
      

      关于 Rails 迁移,您可以使用纯 SQL(我最喜欢的选项)或使用 Rails 的内置方法,但要提供要更新结构的表的“完整路径”:

      add_column 'name_of_your_schema.some_records', :some_column, :string
      

      【讨论】:

      • 感谢@MrYoshiji 的回复,感谢示例!你推荐走 Schema 路线吗?
      • 是的,当然!它有助于以更简洁的方式组织您的表格,而不仅仅是表格名称中的前缀,+ 我很确定它也有助于长期优化(我自己还没有达到那部分)
      猜你喜欢
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2011-10-28
      • 2019-02-04
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多