【问题标题】:How do I have plugin architecture in Ruby on Rails?如何在 Ruby on Rails 中拥有插件架构?
【发布时间】:2010-12-05 06:07:51
【问题描述】:

我必须在 Ruby on Rails 上构建一个社交网站。网站中的功能可能会不时更改;所以我们需要轻松添加/删除功能。此外,我们可能正在建立另一个社交网站。由于这些原因,我们正在考虑为 RoR 中的社交网站构建一个基本框架,并具有安装或卸载框架扩展的功能。

我以前在 Joomla 工作过! CMS 及其用于添加/删除扩展的架构是我所关注的。在 Joomla 中!安装通常有一个管理员端,您可以从中添加/删除/自定义扩展。

我是 RoR 的新手,发现如何做这件事有点困难。任何帮助将不胜感激。

【问题讨论】:

  • Rails 比 Joomla 低一些……你可能需要自己构建一些基础设施,或者使用现有的 Rails 应用程序。
  • @Toby - 正如您评论的那样,可能正在更新。我同意你的观点,Rails 绝对是较低级别的@Shree - 查看一些可以做的例子,特别注意 Redmine 和 ADVA CMS

标签: ruby-on-rails architecture social-networking plugin-architecture plug-and-play


【解决方案1】:

2015 年更新:这个问题在 2009 年得到了回答,但发生了很多变化

插件已被 Gems 和 Engines 取代 有关引擎所需的所有信息: http://guides.rubyonrails.org/engines.html

引擎是为您的 Rails 应用程序构建封装和可重用代码的绝佳方式。

原始答案供参考

在开发方面,Rails 引擎和/或插件可能是您正在寻找的。

Rails Engines are small subsets of an application that can be dropped into any of your Rails applications and handle common parts of the application from scratch.

假设您的社交网络应用程序有一个 wiki、博客、聊天室等。您很可能想要创建一个 wiki 引擎、博客引擎和聊天室引擎。

引擎允许您在不同的应用程序中重复使用这些功能,因此您不必重复自己。

看看:http://rails-engines.org/

Some support for ‘engine’ plugins has been merged into the Rails core codebase in Rails 2.3.

我还建议看看 github 上的一些公共项目,看看人们是如何使用引擎的。

看看一些引擎:

其他有用的阅读链接

在功能方面,您仍然可以拥有一个可以激活某些功能的管理区域,即。通过允许用户使用权限/角色系统访问这些区域来创建您的博客或 wiki。

如果您想构建一个支持 Wordpress 或 Joomla 等某种扩展的 CMS,那么您必须构建它并提供指导方针,或者至少从用户的角度研究如何上传/安装引擎/插件.

不确定这对安全的影响

Redmine 已将这种功能放入他们出色的应用程序中。您可能想在source code 周围挖掘提示和线索

最后Adva_CMS基本上采用了这种方法,并为他们的CMS应用程序创建了a number of Engines

HTH

【讨论】:

    【解决方案2】:

    引擎仍然是一个非常可靠的方法,获取这些信息的新位置位于此处:http://guides.rubyonrails.org/engines.html

    但您需要的是更具体的应用程序。许多应用程序随着时间的推移有机地开发这些东西。他们从手工制作其中的一些开始,然后定期对其进行重构,直到找到与软件设计模式一致的模式,然后他们开发了一个插件框架。

    您打算向最终用户公开您的界面吗?给第三方开发商?应用程序的哪些部分由这些插件控制?它只是表示层吗?它会影响数据模型吗?考虑这样一个事实,即当您发布任何类型的外部接口时,您都在制定需要遵守的合同。

    您可以查看这些设计模式:http://en.wikipedia.org/wiki/Software_design_pattern。他们将帮助您弄清楚如何管理您的开发过程。如果您只是在开发内部使用的插件,那么它们的真正目的是什么?它们与模块有何不同?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-29
      • 2012-06-02
      • 2020-12-05
      • 2018-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多