将Rails和React应用程序拆分到不同的Docker容器中?

我有一个Rails后端和一个React前端的应用程序。 我将它部署在Docker容器中:一个用于应用程序,一个用于postgres,另一个用作数据卷容器。 我有它的工作,但应用程序图像文件是巨大的(3Gb!),并需要很长时间来build立。

我很乐意将它分开。 React应用程序需要一堆Node包,但仅用于开发; 一旦它是所有的webpack-react应用程序本质上是静态文件。 而Rails应用程序根本就不需要Node。

我不需要生产映像中的所有开发时间工具,但实际上,我觉得我需要将它们都放在同一个代码库中,这样我才能(最终)设置一个可以构build的CI / CD环境该应用程序并运行所有的testing。 有没有办法做到这一点,我会有一个React / Node应用程序容器和Rails容器,并在运行时连接它们?

我想你可能已经find了你的问题的答案 – 拆分代码库。

我们都有一些膝下反应,想把所有东西放在同一个回购项目中。 感觉很安全。 处理单独的回购看起来非常可怕,但是对于大多数初学者来说,不会将CSS和JS变成HTML。

我觉得我需要把它全部放在同一个代码库中,所以我可以(最终)build立一个可以构build应用程序并运行所有testing的CI / CD环境

那么这将是很好的 – 但通过Ruby或自动化浏览器testingJavaScript是痛苦的缓慢。 最终你会得到一个“快速”的unit testing套件,以及一个耗时15分钟以上的集成testing的“套件”。

那么最后的select是什么?

您的API和您的SPA应用程序(angular度)实际上做了非常不同的事情。

API接受HTTP请求并发送JSON。 它在Ruby on Rails服务器上运行,并与数据库甚至其他API交谈。

您可以通过发送HTTP请求和testing响应来对API进行集成testing。

您的API不应该真正关心,如果请求来自一个Fuzzle小部件,并呈现一个幸福的脸。 它不是API的工作。

RSpec.describe 'Pets API' do let!(:pet) { create(:pet) } let(:json) { JSON.parse(response.body) } describe 'GET /pets' do get '/pets' expect(json["name"]).to eq pet.name end end 

SPA服务器基本上只需要提供静态的HTML和足够的JavaScript来获得东西滚动。

Docker容器似乎在这里几乎是过度的 – 你只是想要一个逆向代理或负载平衡器后面的nginx服务器,因为你只是提供一件事情。

您应该使用JavaScript编写的testing来模拟API服务器或与假的API服务器交谈。 如果你真的需要,你可以自动浏览器,让它谈谈API的testing版本。

你的SPA最有可能有自己的基于JS的工具包和构build过程,最重要的是 – 它自己的testing套件。

当然这个评价很高,但想一想 – 两个项目都将受益于拥有自己的基础设施和明确的重点。 尤其是API部分,如果你开始在用户界面上构build它,那么结果可能会变得很奇怪。

您可以在github.com/yovasx2/aquacontrol上看看我的rails反应项目

不要忘记开始和分岔