如何转换 Forum application我一直在开发 Rails 引擎,以便它可以嵌入到其他应用程序中?
我应该添加、保留或删除什么?我应该提供一种集成模型的方法吗?如何设置路由和用户配置?如何将其打包成 Gem?我应该注意什么?
阅读文章和文档后,我设法缩小了我的问题范围:
- 我应该为模型命名空间吗?也就是说,我应该将它们保存在我的引擎模块和
app/models/engine
文件夹中吗? - 我应该保留
config
中的哪些配置文件? public
文件夹呢?在 Rails 3.1 中,样式表和 javascript 被移动到app/assets
文件夹中,这解决了这个问题,但是如何在 Rails 3.0 中实现相同的效果?
最佳答案
这里的问题太多,无法正确回答所有问题。这是只要深入挖掘并尝试就会为你带来返回的事情之一。当你深入了解它时,回来问新的具体问题。
以下是我最近执行此操作时使用的一些资源。
- http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/
- http://www.themodestrubyist.com/2010/03/16/rails-3-plugins---part-3---rake-tasks-generators-initializers-oh-my/
- http://pragprog.com/titles/jvrails/crafting-rails-applications
- http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/
在大多数情况下,您可以将应用程序目录中的内容保留在它们所在的位置。您还应该能够将 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/