ruby-on-rails - 如何在 Ruby on Rails 中拥有插件架构?

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

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

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

我是 RoR 的新手,发现很难决定如何做到这一点。任何帮助将不胜感激。

最佳答案

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 上的一些公共(public)项目,看看人们是如何使用引擎的。

看看一些引擎:
  • Wiki-Engine
  • Skinny-Blog-Engine

  • 其他有用的阅读链接
  • Tips for writing Engines
  • Rails Engines, Railscast by Ryan Bates
  • The Russian Doll Pattern (PDF)

  • 在功能方面,您仍然可以拥有一个可以激活某些功能的管理区域,即。通过允许用户使用权限/角色系统访问此类区域,您的博客或 wiki。
  • ACL9
  • role_requirement
  • restful-authentication

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

    不确定这对安全的影响

    Redmine已经将这种功能放入了他们很棒的应用程序中。您可能想挖掘 source code提示和线索

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

    高温高压

    关于ruby-on-rails - 如何在 Ruby on Rails 中拥有插件架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542130/

    相关文章:

    linux - *nix 系统上是否有与 COM 等效的功能?如果不是,那么 *nix 的可重用性方法是什么?

    java - 无状态服务器如何在服务器端保持 session 状态?

    swift - 将 Whatsapp 消息发送到特定的联系电话(Swift 项目)

    mysql - 数据库选择: frequently querying 2nd degree connections

    ruby-on-rails - 将 form_for 与复数类名一起使用时,rails 4 未定义方法 `_index_path'

    ruby-on-rails - 计算不间断天数的最佳方法

    ruby-on-rails - 典狱长 :renew option

    ruby-on-rails - 事件记录 : milliseconds aren't taken into account when using a where clause

    javascript - JQuery 中的可插入编辑组件

    python - 节点大小取决于 NetworkX 上的节点度数