我已经掌握的内容
我正在学习如何在Rails中创建一个多租户应用程序,该应用程序根据使用的域或子域从不同的模式中提供数据。
这里有一些我已经解决的问题:
- 如何让subdomain-fu也适用于域名? 这里有人问了同样的问题,它会带你到这篇博客。
- 使用什么数据库,以及如何进行结构化? Guy Naor有一个很好的演讲,还有一个关于PostgreSQL和模式的好问题。
- 我已经知道我的所有模式都具有相同的结构。它们将在它们所持有的数据方面有所不同。因此,如何对所有模式运行迁移?这里有一个答案。
这三个要点涵盖了我需要知道的许多一般性内容。然而,在接下来的步骤中,我似乎有很多实现方法可供选择。我希望有更好、更简单的方法。
最后,我的问题是什么
当一个新用户注册时,我可以轻松地创建模式。然而,加载其余模式已经具有的结构的最佳和最简单的方法是什么?这里有一些问题/方案,可能会让你有更好的想法。
- 我应该将它传递给一个shell脚本,将公共模式倾倒到临时模式中,然后再将其导入回我的主要数据库中(就像Guy Naor在他的视频中所说的那样)吗?这里有一个从#postgres on freenode获取的快速摘要/脚本。虽然这可能有效,但我将不得不在Rails之外做很多工作,这让我有点不舒服..这也带来了下一个问题。
- 是否有一种方法可以直接从Ruby on Rails中实现这个目标?比如创建一个PostgreSQL模式,然后只需将Rails数据库模式(schema.rb - 我知道,这很令人困惑)加载到该PostgreSQL模式中。
- 是否有一个已经拥有这些功能的gem/plugin呢?类似于“create_pg_schema_and_load_rails_schema(the_new_schema_name)”这样的方法。如果没有,我可能会尝试去创造一个,但我对其中所有组成部分进行测试的质量感到怀疑(特别是如果我最终使用shell脚本来创建和管理新的PostgreSQL模式)。
谢谢,希望这不会太长!
table_exists?
方法似乎忽略了当前模式...因此,加载schema.rb
失败,因为它试图删除一个不存在的表。 - brad