天天看點

基于Docker在Win10平台搭建Ruby on Rails 6.0架構開發環境

作者:劉悅技術分享

2020年,“非著名Web架構”--Ruby on Rails已經15歲了。在今年,Rails 6.0趨于完善,除了拿掉讨厭的Jquery,Webpacker 也成為預設前端打包方案,Sprockets 開始軟着陸,未來很可能會和Jquery一樣被徹底廢棄,這就是曆史的程序。

由于曆史原因,本身就由Ruby撰寫的HomeBrew在Mac os系統上大行其道,是以大部分Rails程式員的主力電腦都是Mac book pro,而使用Windows系統的使用者就沒那麼好運了,比如Rails 6.0開始啟用Webpacker,這就需要使用者安裝yarn,由此帶來一系列的連鎖反應,還有令人絕望的Win10系統下的CoffeeScript問題,這也是Rails包括Jekyll時常令人诟病因素之一:搭個環境都這麼費勁,我為啥不用Django、Laravel亦或者是Springboot呢?為什麼非得受這份罪呢?因為.......熱愛,本次我們使用Docker來簡化Rails環境的搭建,讓它能夠在各個作業系統下做到無縫開發。

當然了,第一步還是安裝Docker,沒有安裝的朋友請參照:win10系統下把玩折騰DockerToolBox以及更換國内鏡像源(各種神坑)。

然後在電腦内建立一個rails項目的目錄

mkdir myr
cd myr           

第三步,拉取基礎鏡像,該鏡像内置了ruby2.5.1和node11為我們安裝Rails6.0打好基礎

docker pull starefossen/ruby-node           

拉取鏡像成功後,啟動容器并且進入指令行,記住用挂載指令把目前目錄共享到Docker容器内部,不會設定共享檔案夾的同學可以參照這篇文章:上窮碧落下凡塵:Win10系統下基于Docker配置Elasticsearch7配合Python3進行全文檢索互動

docker run --rm -v /myr:/usr/src -w /usr/src -ti starefossen/ruby-node /bin/bash           

由于在容器内部已經安裝好ruby2.5.1,是以gem也随之安裝好,那麼我們可以在容易内部安裝Rails

gem install -v 6.0.2 rails           

這裡用-v參數可控制版本号。

在容器内安裝Rails6.0成功之後,直接在容器内建立項目

rails new .           

項目建立好以後,你會發現在windows目錄會同步出現Rails項目檔案

基于Docker在Win10平台搭建Ruby on Rails 6.0架構開發環境

此時,在容器指令行内輸入exit退出容器,此時容器就會停止并且删除,這個容器也完成了它的曆史任務,它的存在就是幫我們建立好一個Rails項目,并且通過共享檔案的形式在主控端同步。

下一步,為了能在主控端運作我們的Rails服務,需要一個Dockerfile檔案來定制我們自己的鏡像

FROM starefossen/ruby-node

# 設定項目目錄
WORKDIR /usr/src/app

# 設定配置檔案
COPY Gemfile* ./
RUN bundle install

# 拷貝檔案
COPY . ./

# 暴露端口
EXPOSE 3000

# 啟動服務指令
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]           

寫好Dockerfile之後,我們就可以打造一個全新的鏡像,這個鏡像用來運作我們已經建立好的Rails項目。

docker build -t myr .           

打包成功後,輸入指令檢視鏡像

docker images           
基于Docker在Win10平台搭建Ruby on Rails 6.0架構開發環境

此時,啟動容器

docker run -p 3000:3000 -v /myr:/usr/src/app/ myr           

通路一下 http://localhost:3000

基于Docker在Win10平台搭建Ruby on Rails 6.0架構開發環境

熟悉的“世界人民大團結”歡迎頁面已經映入眼簾,就是這麼的簡單,有人說了,Python才是如今的“當紅炸子雞”,現在學習Rails會不會是“四九年入國軍”?我想說的是,時至今年,全球依然有超過一億的網站和背景服務由Rails驅動,其中不乏國際知名企業,如:Airbnb、Basecamp、Github等,盡管Php和Python的使用範圍比Ruby更廣,但其最受歡迎的兩個架構Laravel和Django分别比Rails的代碼貢獻者要少很多。更多的開源代碼貢獻者意味着Gem的品質非常之好,俗話說,Gem為Rails傾盡了所有,而Rails經常被人們盛贊,也是因為支援它的社群正在努力建立非常多可重用的庫。

我們可以看看在github上的開源代碼貢獻者的數量對比:

GitHub contributors to Ruby frameworks:

Rails: 4260

Padrino: 228

Hanami: 146

Sinatra: 387

GitHub contributors to Django (Python) and Laravel (PHP):

Django: 2,007

Laravel: 740

差距可見一斑,歸根結底,一款架構的開發和使用還是得以“人”為本。一如既往,專注web,專注産品的Rails6.0在新的時代裡一定會繼往開來、再創輝煌。