ruby-on-rails - 如何将现有的 Rails 3 应用程序转换为引擎?

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-plugins

如何转换 Forum application我一直在开发 Rails 引擎,以便它可以嵌入到其他应用程序中?

我应该添加、保留或删除什么?我应该提供一种集成模型的方法吗?如何设置路由和用户配置?如何将其打包成 Gem?我应该注意什么?


阅读文章和文档后,我设法缩小了我的问题范围:

  • 我应该为模型命名空间吗?也就是说,我应该将它们保存在我的引擎模块和 app/models/engine 文件夹中吗?
  • 我应该保留 config 中的哪些配置文件?
  • public 文件夹呢?在 Rails 3.1 中,样式表和 javascript 被移动到 app/assets 文件夹中,这解决了这个问题,但是如何在 Rails 3.0 中实现相同的效果?

最佳答案

这里的问题太多,无法正确回答所有问题。这是只要深入挖掘并尝试就会为你带来返回的事情之一。当你深入了解它时,回来问新的具体问题。

以下是我最近执行此操作时使用的一些资源。

在大多数情况下,您可以将应用程序目录中的内容保留在它们所在的位置。您还应该能够将 routes.rb 保存在配置目录中,但是如果您的某些路由与应用程序的路由冲突,则可能会出现一些问题。

您可能希望创建一个生成器 来创建一个包含您的引擎所需的所有表的迁移。可以创建其他生成器来覆盖默认 View 和类似的东西。

一定要创建一个使用您的 gem 的测试应用程序。您将遇到的许多问题是确保正确加载引擎的依赖项。在开发过程中,编辑测试应用程序的 Gemfile 以直接指向您的 gem 的源...像这样:

gem 'my-forum', :path => '~/work/my-forum'

命名空间

你至少应该命名你的表/模型,这样你就不会遇到命名冲突。查看您当前的论坛应用程序,我至少会在您的所有表格前加上“forum_”前缀。例如,使用您的引擎的人很可能会有一个名为 Category 的不同模型...因此 ForumCategory 将是更好的选择。

绝对命名您在 lib 目录中创建的任何类。

配置文件

您需要将 routes.rb 保存在配置目录中。您可能还需要保留您的初始化程序。任何特定于应用程序的东西都可能需要移到别处。

公开文件

使用 Rails 3.0.x,您可以将样式表和 javascript 保存在公共(public)目录中。我认为您需要将一些代码添加到您的 Engine 类中......

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end

关于ruby-on-rails - 如何将现有的 Rails 3 应用程序转换为引擎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6470430/

相关文章:

ruby-on-rails - 如何在 Ruby on Rails 中跨联接表获取发票总和?

javascript - 如何让这个 Javascript 字谜算法在 Ruby 中工作?

javascript - 在浏览器中格式化 Rails/ERB HTML 输出

ruby-on-rails - 如何从现有的Ruby代码生成UML图?

ruby-on-rails - 错误 : Could not find GNU compatible version of 'tar' command while installing RVM

ruby-on-rails - 如何在 ruby​​ 中打印数组内的对象元素

ruby-on-rails - Kubernetes:自动为服务进行端口转发

ruby-on-rails - 使用模块定义元类方法

ruby-on-rails - 如何在Rails 3中获取当前方法?

ruby - HAML block 在产量上返回 `0`?