【问题标题】:How do I convert an existing Rails 3 Application into an Engine?如何将现有的 Rails 3 应用程序转换为引擎?
【发布时间】:2011-06-24 15:55:14
【问题描述】:

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

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


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

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

【问题讨论】:

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


    【解决方案1】:

    这里的问题太多,无法正确回答。这是只需深入研究并尝试即可为您带来回报的事情之一。随着您深入了解它,请回来提出新的具体问题。

    以下是我最近这样做时使用的一些资源。

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

    您可能希望创建一个generator 来创建包含引擎所需的所有表的迁移。可以创建其他生成器来覆盖默认视图等。

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

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

    命名空间

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

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

    配置文件

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

    公共文件

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

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

    【讨论】:

    • 谢谢!在学习和尝试之后,我确实设法缩小了我的问题列表。但是,有些事情我还没有弄清楚。更新了我的问题,请看一下。
    • 我做了一些补充,但如果你需要更多细节,你真的应该开始一个关于堆栈溢出的新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多