我正在研究cms,并希望能够为某些帐户提供自定义扩展.就像拥有一个只有该帐户可用或仅由该帐户使用的自定义代码的插件一样.这些自定义扩展将特定于帐户的业务需求,也许不太可能是任何其他帐户需要它,但也许.有没有办法可以完成这个并且无需重新启动整个应用程序就可以加载,从而为其他帐户创建停机时间?
小智 2
就每个客户端插件代码而言,您可以将代码存储在数据模型中,然后 eval() 代码以动态执行它。(当然,您需要在更新时进行一些严格的健全性检查/清理,以确保代码不包含恶意调用)。另一种方法可能是开发一个自定义标签库,与 Radiant CMS 开发人员构建的内容非常相似……然后让您的用户使用提供的标签“编程”他们的行为。这为您提供了更多的控制权和更好的安全性,但灵活性较低。
就停机问题而言,如果您使用现代 Rails 部署方法,我不认为这会成为问题。上面的 eval() 方法不需要重新启动(除非您的自定义代码在上次启动时未安装的库上调用“include ...” - 但安装这些库也是“带外” “您需要解决的问题。
Passenger 为您提供 restart.txt 文件,您可以触摸该文件来强制刷新。类似地,还有一些杂种配方(如 see saw),可以让您逐步重新启动杂种堆栈以避免停机。如果我是你,我会在心理上把这两个问题分开,因为两者之间的依赖性并不那么大。希望这可以帮助。