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

时间:2011-06-24 15:55:14

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

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

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


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

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

1 个答案:

答案 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