2017-05-31 55 views
0

我们正在研究构建一个非常大的导轨应用程序,并考虑使用引擎更好地将“模块”分离出主应用程序。构建作为宝石的导轨引擎的工作流程

我们已经通过创建一个使用宝马motorhead的小型引擎(想要它的active_if组件的想法)来开始这个过程。 该引擎然后从主应用程序中删除,并给了一个git init,然后推送到github。

主应用程序然后能够在Gemfile内拉出宝石。

在这个概念验证过程中,它可以工作,但效率不高,而且以这种方式更新新引擎/宝石有点尴尬,因为它有点像一个子模块。构建像这样的模块化应用程序时,构建和维护引擎/宝石的正确工作流程是什么?

预先感谢

+0

你可以把你的引擎宝石嵌入你的主要Rails应用程序;例如,在'app/engines'或'lib/engines'下;然后使用你的Gemfile从相对路径直接加载gem(使用'path:'选项)。这将所有内容都保存在一个存储库中,但在逻辑上完全分离,并且您可以根据需要选择将每个引擎完全提取为真正的宝石。 –

+0

感谢罗伯特,是的,我们尝试了两种选择。主要问题是,如果我们想让它们完全分离宝石,那么如何继续发展它们呢?即他们目前没有gemfile等,不能单独通过rails服务器启动。此外,当对宝石进行更改(再开发它时),主应用程序需要重新启动或宝石弹簧 – Rockman

+0

您的评论是单块而不是SOA的论点。 DHH的位置:https://m.signalvnoise.com/the-majestic-monolith-29166d022228 – toddmetheny

回答

0

最akward的部分有关部署宝石或发动机作为模块是不断需要更新。我们有很多成功的使用:

bundle config local.my_gem ~/projects/my_gem/

它会指向宝石/引擎版本在磁盘上,而无需修改Gemfile中和Gemfile.lock的。

要删除本地重载run:

bundle config --delete local.my_gem ~/projects/my_gem/

有了这个,你应该能够限制Gemfile.lock的必须更新到部署的时间的时间。