如何扩展现有的Ruby on Rails CMS以托管多个站点?

时间:2010-06-06 17:25:50

标签: ruby-on-rails content-management-system amazon-s3 amazon-simpledb

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

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

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

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

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

你怎么看?我是否以错误的方式思考这个问题?你在这方面有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

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

在我的情况下,它最终浪费了近百万美元的公司资金来构建代码库以运行多个站点,同时仍然能够满足每个客户站点的想法。它起作用,但由于随后进入代码库的特定于站点的黑客攻击数量而无法维护。如果您不必担心在平台上运行的特定客户端站点,您可以使其工作。

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

我希望你能把它拉下来。我失败了。

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

答案 1 :(得分:0)

对于Rails 2.3,有詹姆斯·斯图尔特的Theme Support Plugin,对于Rails 3 +,有一些是lucasefe的themes_for_rails gem

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