Dav*_*Ham 2 ruby-on-rails docker reactjs
我有一个带有Rails后端和React前端的应用程序.我在Docker容器中部署它:一个用于app,一个用于postgres,一个用作数据卷容器.我有它工作,但应用程序图像文件是巨大的(3Gb!),并需要很长时间来构建.
我喜欢分手的方法.React应用程序需要一堆Node包,但仅用于开发; 一旦它全部是webpack-ed,React应用程序本质上是静态文件.Rails应用程序根本不需要Node.
我不需要生产映像中的所有开发时工具,但实际上,我觉得我需要在相同的代码库中拥有它,这样我才能(最终)建立一个可以构建的CI/CD环境应用程序并运行所有测试.有没有办法做到这一点,我有一个React/Node应用程序的容器和Rails的容器,并在运行时连接它们?
我认为您可能已经找到了问题的答案 - 拆分代码库.
我们都有某种下意识的反射,希望将项目中的所有内容保存在同一个回购中.感觉很安全.处理单独的repos似乎非常可怕,但对于大多数初学者来说,不会将CSS和JS混合成HTML.
我觉得我需要在相同的代码库中拥有它所以我可以(最终)建立一个可以构建应用程序并运行所有测试的CI/CD环境
那很好 - 但是通过Ruby或自动浏览器测试javascript非常慢.您最终会得到一个"快速"的单元测试套件和一套缓慢的"套件"集成测试,需要15分钟以上.
您的API和SPA应用程序(角度)实际上做了很多不同的事情.
API接受HTTP请求并输出JSON.它在Ruby on Rails服务器上运行,并与数据库甚至其他API进行通信.
您可以通过发送HTTP请求和测试响应来对API进行集成测试.
如果请求来自Fuzzle小部件并且呈现幸福的面孔,那么您的API应该不在乎.它不是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
Run Code Online (Sandbox Code Playgroud)
SPA服务器基本上只需要提供静态HTML和足够的javascript来获取内容.
这里的docker容器看起来几乎有点过分 - 你只需要一个反向代理或负载均衡器后面的nginx服务器,因为你只提供一件事.
您应该使用javascript编写的测试模拟API服务器或与假的API服务器通信.如果你真的需要,你可以自动化浏览器,让它与API的测试版本交谈.
您的SPA很可能拥有自己的基于JS的工具包和构建过程,最重要的是 - 它自己的测试套件.
当然这是高度自以为是,但想一想 - 两个项目都将受益于拥有自己的基础设施和明确的重点.特别是如果你开始围绕用户界面构建它,最终会变得非常奇怪的API部分.
| 归档时间: |
|
| 查看次数: |
1414 次 |
| 最近记录: |