簡體   English   中英

將Rails和React應用程序拆分到單獨的Docker容器中?

[英]Splitting up a Rails and React app into separate Docker containers?

我有一個帶有Rails后端和React前端的應用程序。 我將其部署在Docker容器中:一個用於應用程序,一個用於postgres,一個作為數據量容器。 我可以使用它,但是應用程序映像文件很大(3Gb!),並且構建時間很長。

我希望有一種拆分方法。 React應用程序需要一堆Node包,但僅用於開發。 一旦全部打包,React應用程序本質上就是靜態文件。 而且,Rails應用程序根本不需要Node。

我不需要生產映像中的所有開發時工具,但實際上,我覺得我需要將所有這些都放在同一代碼庫中,這樣我(最終)可以建立一個可以構建的CI / CD環境。該應用程序並運行所有測試。 有沒有一種方法可以使我有一個用於React / Node應用程序的容器和一個用於Rails的容器,並在運行時將它們連接起來?

我認為您可能已經找到問題的答案-拆分代碼庫。

我們所有人都有某種下意識的反應,希望將項目中的所有內容都保留在同一回購中。 感覺很安全。 處理單獨的存儲庫似乎很可怕,但是對於大多數初學者來說,不要將CSS和JS拼湊成HTML。

我覺得我需要將所有內容都放在同一代碼庫中,以便(最終)可以設置一個CI / CD環境以構建應用程序並運行所有測試

那就太好了-但是通過Ruby或自動瀏覽器測試javascript速度很慢。 您最終需要一組“快速”的單元測試和一個緩慢的“套件”的集成測試,這需要15分鍾以上的時間。

那么還有什么選擇呢?

您的API和SPA應用程序(角度)實際上做了非常不同的事情。

該API接收HTTP請求並輸出JSON。 它在Ruby on Rails服務器上運行,並與數據庫甚至其他API進行對話。

您可以通過發送HTTP請求並測試響應來對API進行集成測試。

您的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編寫的測試,可以模擬API服務器或與假API服務器進行通信。 如果確實需要,則可以使瀏覽器自動化,並讓其與API的測試版本進行通訊。

您的SPA很可能會擁有自己的基於JS的工具包和構建過程,最重要的是,它將擁有自己的測試套件。

當然,這固執己見,但請仔細考慮-這兩個項目都將從擁有自己的基礎架構和明確的重點中受益。 尤其是API部分,如果您開始圍繞用戶界面進行構建,最終可能會變得很奇怪。

您可以在github.com/yovasx2/aquacontrol上查看我的rails react項目

別忘了開始並分叉它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM