从单个Heroku应用程序运行多个站点是否可行?我问的原因是因为在大多数人重复使用相同的组件时启动多个Heroku应用程序似乎是愚蠢和不必要的。共享同一个Postgresql数据库也是有意义的,因为Django似乎支持这种行为,它的“站点”框架开箱即用。
作为我想要实现的一个例子,假设我有一个Heroku应用程序。在那个应用程序上,我有一堆Django应用程序,如“博客”,“调查”,“论坛”等。但是,我有两个名为“项目A”和“项目B”的项目,它们都使用了许多相同的项目应用程序和相同的Postgresql数据库。
如果没有黑客的解决方案,这会成为可能吗?
答案 0 :(得分:1)
一般原则是使多个域或子路径指向相同的后端代码。 E.g。
http://customer1.myapp.com/
http://customer2.myapp.com/
或
http://myapp.com/customer1/
http://myapp.com/customer2/
然后,您的应用程序代码使用URL(主机名,路径等)来决定要显示的内容。 PostgreSQL的一种流行方法是SET search_path
来反映当前活跃的客户,并拥有所有客户特定表的克隆。就个人而言,我认为相当清晰,而是添加一个WHERE
条款术语,按客户过滤行;这样可以避免所有重复的表定义以及在进行DDL更改时产生的麻烦,并且它允许您以更灵活的方式对表进行分区。
如果您正在使用search_path
,那么您必须注意应用程序级缓存,这些缓存可能无法理解它现在看到的customer_user
表不是它看到的表最后一个请求,针对不同的客户。这是使用基于WHERE
子句的分区的另一个好理由。
我建议为Django专用位搜索“django multi-tenancy”或“django multi-tenant”的信息;我真的在数据库后端方面和一些通用应用程序前端工作在各种工具(目前不包括Django)。