将 Rails 应用程序提取到插件或引擎中

Posted

技术标签:

【中文标题】将 Rails 应用程序提取到插件或引擎中【英文标题】:Extracting a Rails application into a plugin or engine 【发布时间】:2010-06-11 20:07:43 【问题描述】:

我有一个 Rails 2.3 应用程序,我想将它提取到插件或引擎中。该应用程序具有用户身份验证和祖先插件支持的基本 cms 功能。

我想将应用程序的逻辑提取到插件/引擎中,以便我可以将此代码用于未来的项目,如果需要,可以使用不同的“皮肤”或“主题”。

我不完全确定我是否真正理解插件和引擎概念之间的区别,所以这是一个很好的第一点。

什么是最好的方法,有什么好的起点,链接,解释,我应该遵循的例子。另外,随着 R3 的发布,关于插件等,我有什么需要注意的吗?

我将从观看 Ryan 的 http://railscasts.com/episodes/149-rails-engines 开始 但显然现在已经有一年多了,所以我面临的挑战之一是找到关于这个主题的最新和相关信息。

感谢所有提示和帮助。

【问题讨论】:

【参考方案1】:

实际上,转换应用程序非常简单。只需创建一个插件文件夹,在其中放置一个包含所有模型视图控制器文件夹的应用程序文件夹,就是这样。

不过,您必须自己管理迁移。您还必须定义 rake-tasks 以将文件复制到您的公用文件夹。我认为 railscasts 仍然是最新的,如果有的话,现在在 rails 2.3 中更容易了。

祝你好运!

[编辑:对于 rails3] Rails 3 引擎非常干净和强大。查看 Jose Valim 的 gist。

【讨论】:

Rails 2 引擎可以在 Rails 3 应用程序中工作吗?自发布此问题以来,这仍然是相同的过程还是发生了变化? rails 2 引擎仍然可以在 rails 3 中工作。但是 rails 3 引擎具有更好的集成,现在可以实现更多。所以你仍然可以使用 rails 2 引擎,但是将它们转换为 rails 3 引擎确实很划算。 rails 2 引擎是一个插件,rails 3 插件很可能是一个 gem:更干净:) @Passionate:mmmmmm 奇怪的互联网,两年后链接消失(讽刺意味)。我搜索了一个类似的链接并更新了我的答案。 如何将该插件/引擎包含到另一个 Rails 应用程序中? 这是一个非常古老的答案(从 2010 年开始)。目前,构建插件仍然非常容易,并将它们包含在您的 Rails 应用程序中。 rails 插件是app 文件夹中的一段共享代码,可以拥有自己的迁移和资产(尽管从 rails 6 和 webpacker 开始,这更加困难)。插件现在是 gem,您可以像使用任何 gem 一样包含它们(这并不意味着您必须将它们发布到 ruby​​gems,可以从文件夹或 github 加载 gem),有关更多信息,请参阅:guides.rubyonrails.org/engines.html 【参考方案2】:

由于向后不兼容的更改,您可能最好将引擎集中在 Rails 3 上,而不是尝试使其与 Rails 2 和 Rails 3 兼容。这是一个更新的tutorial for Rails 3

Rails Core 成员 Jose Valim 的书“Crafting Rails applications”也有很好的章节。他展示了如何使用他的工具EngineX 生成 Rails 3 引擎结构,因此您可以更轻松地为 Rails 3 项目创建引擎。他的 gem devise 也是一个很好的 rails 引擎,因为您可以通过将模板复制到应用程序目录中轻松自定义它,并允许您对想要自定义的控制器进行子类化。

【讨论】:

【参考方案3】:

编写插件与编写应用程序是完全不同的过程,如果您已经拥有应用程序代码,应该可以直接将其转换为插件。

考虑一下,如果您在应用中使用第三方插件,它可能会变得非常混乱。

【讨论】:

以上是关于将 Rails 应用程序提取到插件或引擎中的主要内容,如果未能解决你的问题,请参考以下文章

Rails:如何收听/从服务或队列中提取?

从 Rails 应用程序的数据库中提取 CSS 资产(如背景图像)?

如何将 jquery 插件添加到 rails 3.1

谷歌应用引擎:隐藏 Rails 密钥的最佳实践?

Ruby on Rails 用户管理引擎/框架? (带网页)

如何使用 Ruby on Rails 5 将数据从 URL 提取到表单中