0

我正在尝试构建一个可用于托管多个站点的 CMS。我知道我最终会在这个项目中重新发明轮子一百万次,所以我正在考虑扩展现有的开源 Ruby on Rails CMS 以满足我的需求。

其中一项需求是能够运行多个站点,同时只使用一个代码库。这样,当我想要进行更新时,我可以在一个地方进行更新,并且更改会反映在所有站点上。我认为这将能够通过运行应用程序的多个实例来扩展。

我认为我可以使用域/子域来确定要显示哪些数据。例如,有人访问 subdomain1.mysite.com,应用程序在数据库中查找 subdomain1 的内容。

我看到的问题是大多数预先构建的 CMS 解决方案,它们仅设计用于托管一个站点,包括我想要使用的站点。因此,数据库的结构可以与一个站点一起使用。但是,我有一个想法,我可以通过为每个站点“创建一个新数据库”来克服这个问题,然后如上所述根据域/子域指定要连接的数据库。

我正在考虑在 Heroku 上托管这个,所以我想知道我的选择可能是什么。我对 Amazon S3 或 Amazon SimpleDB 不是很熟悉,但我觉得有某种“云数据库”可以让这个解决方案更加现实,而不是为每个站点创建一个新的 MySQL 数据库。

你怎么看?我在想这个错误的方式吗?您在这方面有什么建议?

4

2 回答 2

0

我曾在这样的 Rails 应用程序上工作过,它的完成方式是基于命名的虚拟主机,每个站点都运行 db 条目。如有必要(博客文章等),每条记录的范围都限定为一个站点,而用户可以访问该数据库之外的所有站点。管理员权限可以是全局的,也可以仅限于一个或多个站点。

当您说您将在项目期间重新发明轮子一百万次时,您是绝对正确的。插件可能需要在 CMS 本身之上进行黑客攻击。

在我的情况下,最终浪费了将近一百万美元的公司资金来构建代码库以运行多个站点,同时仍然能够满足每个客户站点的突发奇想。它有效,但由于随后进入代码库的特定站点黑客的数量,它不是很容易维护。如果您不必担心迎合在您的平台上运行的特定客户站点,您也许可以使其工作。

最后,无论采用何种方法,您都将需要一个间接层来处理不同的站点。我们最终将其放入数据库本身。如果您使用您提到的 different-db-for-each-site 方法,您将把该层放在您的代码中。我不确定哪个是更好的方法。

我希望你能做到这一点。我失败了。

另外,正如我今天了解到的,Heroku 为 Rails 应用程序提供了 postgres 而不是 mysql。

于 2010-06-06T17:59:48.950 回答
0

有用于 Rails 2.3的 James Stewart 的Theme Support Plugin ,以及用于 Rails 3+的 lucasefe 的Themes_for_rails gem 。

我刚开始使用 2.3 版本,到目前为止运行良好。

于 2011-04-10T13:02:23.510 回答