<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>denglitong (denglitong)</title>
    <link>https://ruby-china.org/denglitong</link>
    <description>风信子</description>
    <language>en-us</language>
    <item>
      <title>如何将已有 Rails 改造成 engine 挂载到宿主应用？</title>
      <description>&lt;p&gt;现有一需求需要对一个复杂的 rails 进行插件化开发，有两个思路：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;老大的意思是在原有 rails 的目录结构下增加一个 plugins 目录，然后在里面写插件的逻辑；&lt;/li&gt;
&lt;li&gt;我倾向于达到的做法是：将已有的 rails 改造成一个 full engine，然后挂载到宿主应用中，宿主应用直接重载 full engine 中的内容扩展功能即可；&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;第一个思路，目前实现的 demo 比较简单，插件中可能还未涉及独立的 db:migrate、worker/jobs 这类的应用，只是一个简单的 mvc，当然如果选择了这个思路最后肯定也是会走通的。&lt;/p&gt;

&lt;p&gt;第二个思路，由于我目前对 rails 的 engine 这里还不是很熟悉，只是对 rails 的启动过程有过简单了解，对往下的 rack/railties 都了解不是很多，而且我们这个已有的复杂 rails 应用确实很复杂（如果说可以和 gitlab-ce 相媲美也不为过），所以我考虑的风险点是一个复杂的 rails 应用改造成一个 full engine（暂时就不考虑 mountable engine 吧）挂载到一个新的宿主应用中是否现实？如果要达到这个目标，我需要去学习哪些知识看哪些资料？这个需求排期还有一个月多一点的时间。&lt;/p&gt;

&lt;p&gt;目前我查阅到的 engine 的资料大多是介绍 mountable engine 的，不过鉴于我的需求只是不再改动原有的 rails 应用而是对其进行扩展，所以我这里想改造成 full engine 挂载。而对 mountable engine 的入门案例里都算简单，不涉及 engine 变庞大之后像诸如 gem 包加载、目录层级变得很多的情况，比如 lib/下有各种 api 接口，config 下有很多配置和初始化脚本，app 下也会有很多目录。&lt;/p&gt;

&lt;p&gt;所以，上面两个思路哪个更符合最佳实践？我倾向于实现第二个思路，但鉴于目前能力所限，对接下来的具体实现还不是很清晰，希望各位大牛指导一下我正确的方向，如果能有参考资料或者相关案例就更好了。&lt;/p&gt;</description>
      <author>denglitong</author>
      <pubDate>Sun, 08 Apr 2018 00:36:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/35402</link>
      <guid>https://ruby-china.org/topics/35402</guid>
    </item>
  </channel>
</rss>
