rails cms的插件架构

时间:2009-08-01 20:34:39

标签: ruby-on-rails

我正在研究cms,并希望能够为某些帐户提供自定义扩展功能。就像拥有一个只有该帐户可用或仅由该帐户使用的自定义代码的插件一样。这些自定义扩展将特定于帐户的业务需求,也许不太可能是任何其他帐户需要它,但也许。有没有办法可以完成这个并且无需重新启动整个应用程序就可以加载,从而为其他帐户创建停机时间?

4 个答案:

答案 0 :(得分:2)

就每个客户端插件代码而言,您可以将代码存储在数据模型中,然后eval()代码以动态执行它。 (当然,您希望在更新时进行一些严格的健全性检查/清理,以确保代码不包含恶意调用)。另一种方法可能是开发一个自定义标记库,与Radiant CMS开发人员构建的内容大致相同......然后让用户使用提供的标记“编程”他们的行为。这样可以提供更多的控制和更好的安全性,但代价是灵活性降低。

就停机问题而言,如果您使用的是现代导轨部署方法,我看不出这应该是一个什么问题。上面的eval()方法不需要重启(除非您的自定义代码在上次启动时未安装的库上调用“include ...” - 但安装这些库也是“带外” “你需要解决的问题。

Passenger会为您提供restart.txt文件,您可以触摸该文件以强制刷新。类似地,有杂项的配方(比如看到锯),允许您逐步重新启动杂项堆栈以避免停机。如果我是你,我会在精神上将这两个问题分开,因为两者之间的依赖关系并不那么好。希望这会有所帮助。

答案 1 :(得分:1)

我构建了一个cms并为它添加了插件支持。你可以做的最好的事情就是让它全部由数据库驱动,从技术上讲,这个插件适用于所有人,但是如果你已经“购买”它,或者其他一些打开它的方式,你只能使用它。这是真的只是一个db记录。

这是0停机时间。 :)然后,我不知道你的其他设置是什么样的。我认为您的解决方案将专门针对您的cms系统设计而定制。

答案 2 :(得分:0)

这种停机时间真的有多长?我的意思是运行迁移和东西将是一个系统的痛苦,允许任何汤姆迪克或哈里上传插件。您必须验证迁移是否已正确设置等等,如果您没有获得“花哨”并且只允许他们在js中做一些“整洁”的事情,那么我想这是一个重新启动乘客的问题,这是什么5秒?

我会亲自查看其他“着名的”CMS,比如光芒四射,或看看他们是否/如何做到这一点。祝你好运。

答案 3 :(得分:0)

我不是,如果这正是你想要达到的目的,但你有没有检查过煎饼?

煎饼是一种工具&框架,让您堆叠和松散地耦合基于Rack的Web应用程序。

http://www.rubyinside.com/pancake-rack-webapps-stacking-2863.html