原文轉載自「劉悅的技術博客」https://v3u.cn/a_id_170
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項目文件
此時,在容器命令行內輸入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 run -p 3000:3000 -v /myr:/usr/src/app/ myr
熟悉的“世界人民大團結”歡迎頁面已經映入眼簾,就是這么的簡單,有人說了,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在新的時代里一定會繼往開來、再創輝煌。
原文轉載自「劉悅的技術博客」 https://v3u.cn/a_id_170