時間老去,Ruby不死,Ruby語言基礎入門教程之Ruby3全平臺開發環境搭建EP00

来源:https://www.cnblogs.com/v3ucn/archive/2022/12/22/16994704.html
-Advertisement-
Play Games

如果說電子游戲是第九藝術,那麼,編程技術則配得上第十藝術的雅稱。藝術發展的普遍規律就是要給與人們對於藝術作品的更高層感受,而Matz的Ruby語言則正是這樣一件藝術品。 無論是語法還是理念,都讓Ruby開發者感受到款待,如此,Ruby代碼就像活了過來,它們時而高聲,卻藏不住優雅,時而細語,卻意外地鏗 ...


如果說電子游戲是第九藝術,那麼,編程技術則配得上第十藝術的雅稱。藝術發展的普遍規律就是要給與人們對於藝術作品的更高層感受,而Matz的Ruby語言則正是這樣一件藝術品。

無論是語法還是理念,都讓Ruby開發者感受到款待,如此,Ruby代碼就像活了過來,它們時而高聲,卻藏不住優雅,時而細語,卻意外地鏗鏘,真是美妙,這種莊重而溫柔的魅力,用那一代奉松本行弘為偶像的人的話說,叫劍膽琴心。現在的話又講,心有猛虎,細嗅薔薇。

本次,讓我們再一次全平臺構建Ruby3開發環境,感受Ruby3的魅力。

Mac平臺(ARM/X86)

都知道Mac和Ruby是天作之合,你中有我,我中有你,銜接得天衣無縫,拉鏈般重合。

首先安裝Homebrew,它是一款由Ruby開發的包管理工具,目前支持MacOS和Linux系統,通過Homebrew,我們可以多快好省地安裝最新的Ruby3.0以上版本。

如果是M系列晶元的Mac電腦,運行命令安裝ARM架構版本的Homebrew:

/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

隨後在終端執行命令echo $SHELL獲得終端類型:

/bin/zsh => zsh => .zprofile  
/bin/bash => bash => .bash_profile

如果是zsh終端,輸入命令配置環境變數:

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile  
eval "$(/opt/homebrew/bin/brew shellenv)"

反之,bash終端則輸入如下命令:

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.bash_profile  
eval "$(/opt/homebrew/bin/brew shellenv)"

從MacOS Catalina(10.15.x) 版開始,Mac使用zsh為預設終端。

如果是Intel晶元的Mac,可以選擇X86架構的Homebrew:

arch -x86_64 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

最後註意X86架構的Homebrew預設路徑為:/usr/local/bin/brew

然後再執行source ~/.zprofile或source ~/.bash_profile命令更新文件。

安裝好之後,在終端輸入命令,查看brew版本:

➜  ~ brew -v  
Homebrew 3.6.4  
Homebrew/homebrew-core (git revision 375065e9c3a; last commit 2022-10-05)  
Homebrew/homebrew-cask (git revision 7068d45cf4; last commit 2022-10-05)

說明安裝成功,如果是老版本,可以運行命令進行更新:

➜  ~ brew cleanup && brew update  
Already up-to-date.

除此之外,也可以為Homebrew設置一下國內源:

# brew  
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git  
  
# core  
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git  
  
# cask  
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git  
  
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zprofile  
source ~/.zprofile

但事實上,有時候國內源由於同步延遲問題,會和國外源有一些微小的差異,而這些差異往往會導致Ruby軟體的編譯失敗,所以兩種源各有利弊,各自斟酌。

接下來我們來安裝Ruby3,業界比較主流的安裝方式大抵兩種:rvm或者rbenv,這裡我們使用rbenv,它其實就是一個類似python中conda一樣的多版本管理軟體包,可以方便一些老項目以低版本ruby運行,比如ruby1.9:

brew install ruby-build rbenv

之後將rbenv命令添加到zsh命令行的環境變數中:

echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.zshrc  
source ~/.zshrc

重啟命令行,鍵入rbenv:

➜  ~ rbenv  
rbenv 1.2.0  
Usage: rbenv <command> [<args>]  
  
Some useful rbenv commands are:  
   commands    List all available rbenv commands  
   local       Set or show the local application-specific Ruby version  
   global      Set or show the global Ruby version  
   shell       Set or show the shell-specific Ruby version  
   install     Install a Ruby version using ruby-build  
   uninstall   Uninstall a specific Ruby version  
   rehash      Rehash rbenv shims (run this after installing executables)  
   version     Show the current Ruby version and its origin  
   versions    List installed Ruby versions  
   which       Display the full path to an executable  
   whence      List all Ruby versions that contain the given executable  
  
See `rbenv help <command>' for information on a specific command.  
For full documentation, see: https://github.com/rbenv/rbenv#readme

可以看到最新的1.2.0版本。

隨後鍵入命令查看目前可編譯的Ruby版本:

~ rbenv install --list                                                                                 
2.6.10  
2.7.6  
3.0.4  
3.1.2  
jruby-9.3.8.0  
mruby-3.1.0  
picoruby-3.0.0  
rbx-5.0  
truffleruby-22.2.0  
truffleruby+graalvm-22.2.0

這裡我們選擇安裝3.0.4版本:

rbenv install 3.0.4

安裝成功後鍵入rbenv versions:

~ rbenv versions    
  system  
* 3.0.0 (set by /Users/liuyue/.rbenv/version)  
  3.0.4

列出所有安裝好的版本。

隨後可以使用 rbenv global命令來切換版本:

~ rbenv global 3.0.4   
➜  ~ rbenv versions      
  system  
  3.0.0  
* 3.0.4 (set by /Users/liuyue/.rbenv/version)

如果某個版本不再需要,也可以進行uninstall卸載操作:

➜  ~ rbenv uninstall 3.0.0  
rbenv: remove /Users/liuyue/.rbenv/versions/3.0.0? [yN] y  
➜  ~ rbenv versions         
  system  
* 3.0.4 (set by /Users/liuyue/.rbenv/version)

至此,大功告成,接著進入ruby命令行工具irb,終端輸入:irb

與Python執行和終端使用同一命令不同的是,Ruby的執行命令為ruby,而命令行則是irb

irb是Ruby附帶的互動式編程環境,它是由石冢啟十先生撰寫的:

~ irb  
irb(main):001:0> puts "你好,Ruby"  
你好,Ruby  
=> nil

接著可以使用exit或者quit命令退出Ruby命令行:

➜  ~ irb  
irb(main):001:0> puts "你好,Ruby"  
你好,Ruby  
=> nil  
irb(main):002:0> exit  
➜  ~

Docker(其他平臺構建Ruby開發環境)

如果使用的是Windows平臺或者其他系統,我們可以使用Docker的方式快速搭建環境,Docker安裝請參見:一寸宕機一寸血,十萬容器十萬兵|Win10/Mac系統下基於Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

安裝完成之後,首先下載ruby3.0.4鏡像:

[root@instance-7dojaq0e ruby3]# docker pull ruby:3.0.4-slim  
3.0.4-slim: Pulling from library/ruby  
31b3f1ad4ce1: Pull complete  
9ecf19185ffb: Pull complete  
7201eddc3a4c: Pull complete  
384b637b5031: Pull complete  
e878247dc643: Pull complete  
Digest: sha256:5b99cbdb905610eb1aa47c24c15b724045e65dab0b5fd1c069f5f722895724e9  
Status: Downloaded newer image for ruby:3.0.4-slim  
docker.io/library/ruby:3.0.4-slim

下載完成之後,啟動容器:

docker run -it ruby:3.0.4-slim

隨後即可進入Ruby命令行:

[root@instance-7dojaq0e ~]# docker run -it ruby:3.0.4-slim  
irb(main):001:0> puts "你好 ruby"  
你好 ruby  
=> nil

簡單方便。

結語

按照固有思維方式,人們總以為時下最熱門的語言才是學習的目標,但Ruby除了基礎語法之外,還給了一些看不見、摸不著的東西,我認為這在目前盛行“實惠”價值觀的時候,提一提還是必要的。很多事情不用問值不值得,只用問,它對你來說,是不是有若珍寶。最後,謹以此系列教程獻給司徒正美兄,我的Ruby領路人,真正的Ruby高手,大神中的大神,正道是:司徒正美成絕響,人間不見Ruby's Louvre。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 23種經典設計模式共分為3種類型,分別是創建型、結構型和行為型。 今天,我們把這3種類型分成3個對應的小模塊,逐一帶你回顧一下每一種設計模式的原理、實現、設計意圖和應用場景。 還是那句話,如果你看了之後,感覺都有印象,那就說明學得還不錯;如果還能在腦子裡形成自己的知識架構,閉上眼睛都能回憶上來,... ...
  • 前言 可以通過分析PriorityBlockingQueue來瞭解JUC中的線程安全的隊列實現的一些套路,這些套路會在JUC中其他數據結構實現上反覆出現,從而可以更合理的瞭解那些實現機制背後通用的部分。 BlockingQueue A Queue that additionally supports ...
  • 互斥鎖 對於任一共用資源,同一時間保證只有一個操作者,這種方法稱為 互斥機制。 關鍵字 Mutex 表示互斥鎖類型,它的 Lock 方法用於獲取鎖,Unlock 方法用於釋放鎖。在 Lock 和 Unlock 之間的代碼,可以讀取和修改共用資源,這部分區域稱為 臨界區。 錯誤的併發操作 先來看一個錯 ...
  • 概述 Go 支持將多個結構體通過嵌套的方式,組成一個大的結構體,降低了單個結構體複雜度,同時提高了結構體之間組合的靈活性。 例子 為了省略篇幅,本小節只使用 字面量 方式初始化,new() 的初始化方式請參照 結構體 小節。 每個結構體單獨初始化,最後組裝 package main import ( ...
  • JZ51 數組中的逆序對 題目 在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P mod 1000000007 方法1:暴力 思路 演算法實現 兩個for迴圈,如果前面的 ...
  • 大家好,我是3y,一年CRUD經驗用十年的markdown程式員👨🏻‍💻常年被譽為職業八股文選手 我又又又又被吐槽了,隨之而來,我的消息推送平臺開源項目Austin又又又又更新啦,迭代自己的項目多是一件美事啊。 源碼Gitee鏈接:gitee.com/austin 01、可插拔 我的項目逐漸成 ...
  • 案例介紹 歡迎來到我的小院,我是霍大俠,恭喜你今天又要進步一點點了!我們來用Java編程實戰案例,做一個動態調色板。案例界面會出現三個滑動組塊以及對應的數值,通過移動滑塊可以改變顏色區域的顯示。通過實戰我們將學會組件的使用以及新的事件介面ChangeListener。 案例演示 界面開始顯示的是調色 ...
  • 在日常的開發工作中,為了保證落庫數據的完整性,參數校驗絕對是必不可少的一部分,本篇文章就來講解下在項目中該如何優雅的校驗參數。 假設有一個新增學員的介面,一般第一步我們都會先校驗學員信息是否正確,然後才會落庫,簡單起見,假設新增學員時只有2個欄位:姓名、年齡。 @Data public class ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...