如何将我正在开发的Forum application转换为Rails引擎,以便它可以嵌入到其他应用程序中?
我应该添加,保留或删除哪些内容?我应该提供一种集成模型的方法吗?如何设置路由和用户配置?如何将其打包成宝石?我应该注意什么?
阅读完文章和文档后,我设法缩小了我的问题范围:
app/models/engine
文件夹中吗?config
中的哪些配置文件?public
文件夹怎么样?在Rails 3.1中,样式表和javascripts被移动到app/assets
文件夹,这解决了这个问题,但是如何在Rails 3.0中实现相同的效果呢?答案 0 :(得分:9)
这里有太多问题无法正确回答。这是通过挖掘和尝试来为您带来回报的其中一项。随着您的深入了解,请回过头来询问新的具体问题。
以下是我最近这样做时使用的一些资源。
在大多数情况下,您可以将应用目录中的内容保留在原来的位置。您还应该能够将routes.rb
保留在配置目录中,但如果您的某些路由与该应用程序的路径发生冲突,则可能存在一些问题。
您可能希望创建generator
来创建包含引擎所需的所有表的迁移。可以创建其他生成器来覆盖默认视图等等。
创建一个使用gem的测试应用程序。您将遇到的许多问题都是确保正确加载引擎的依赖关系。在开发过程中,编辑测试应用程序的Gemfile直接指向gem的源代码......如下所示:
gem 'my-forum', :path => '~/work/my-forum'
<强>命名空间
您至少应该为表/模型命名,这样就不会遇到命名冲突。看看你当前的论坛应用程序,我至少在你的所有表格前加上'forum_'。使用您的引擎的人很可能会使用名为Category
的不同模型......所以ForumCategory
将是更好的选择。
绝对命名您在lib目录中创建的任何类。
配置文件
您需要将routes.rb
保留在config目录中。您可能还需要保留初始化器。任何应用程序特定的东西都可能需要移动到其他地方。
公共档案
使用Rails 3.0.x,您可以将样式表和javascripts保存在公共目录中。我认为有一些代码需要添加到Engine
类中,但是......
initializer "static assets" do |app|
app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end