ใครบอกว่า "อย่าใช้ System Ruby" คำแนะนำดี แต่ทำไม? มาดูด้วยกัน
คุณมี Ruby ไหนอยู่?
macOS มาพร้อม "System Ruby" ติดตั้งไว้แล้ว
เช็คด้วยคำสั่ง which:
$ which ruby
/usr/bin/ruby
ถ้าเห็น /usr/bin/ruby = System Ruby ของ macOS
ใช้รัน sysadmin scripts ได้ ไม่ปัญหา ตราบใดที่ไม่พยายามอัปเดตหรือติดตั้ง gems ลงไป
แต่ อย่าใช้พัฒนาโปรเจกต์ Ruby
Ruby สำหรับการพัฒนา
ควรติดตั้ง Ruby ผ่าน Homebrew หรือใช้ version manager: asdf, chruby, rbenv, rvm
Version manager ช่วยเวลามีหลายโปรเจกต์ ไม่สามารถอัปเดตพร้อมกันได้ ดูคู่มือเปรียบเทียบและติดตั้งที่ "Install Ruby on a Mac"
แต่ทำไมไม่ใช้ Mac default Ruby? มาดูเหตุผล
ปัญหาติดตั้ง Gem
RubyGems = ไลบรารีสำเร็จรูป ทำให้พัฒนาง่าย สนุก โปรเจกต์ส่วนใหญ่ใช้ gems
System Ruby: gem install พยายามเซฟไป /Library/Ruby/Gems/2.6.0 โฟลเดอร์นี้เป็นของ root ผู้ใช้ทั่วไปเขียนไม่ได้ (และไม่ควรแก้)
ลอง gem install rails → Error:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory
ละเมิดความปลอดภัยระบบ
Unix มี workaround: ติดตั้ง gems ด้วย superuser (sudo) แต่มองว่า อย่าทำ!
$ sudo gem install rails
ทุกครั้งจะรัน sudo ควรหยุดคิด: "จะยิงเท้าตัวเองไหม?"
ที่นี่ต้อง sudo เพราะแก้ไข system files ที่ OS จัดการ อย่าทำ! อาจทำระบบเสียหาย/ถูกคุกคาม แม้ gem จะมีโค้ดอันตราย
การจัดการ Gem
นักพัฒนาฝีมือใช้ Bundler ติดตั้งและจัดการ dependencies
โปรเจกต์ต่างกันอาจต้องการ gem เวอร์ชันต่างกัน หรือ gems ต่างกันพึ่งพา dependency เวอร์ชันต่างกัน
Bundler ใช้ Gemfile ในโฟลเดอร์โปรเจกต์ track gems ที่ต้องการ
ถ้า sudo gem install ด้วย System Ruby → สวนหลังบ้าน gems ไม่เข้ากันใน system directory
แก้ได้โดยติดตั้ง Bundler ให้ใช้ home directory สำหรับ gems แต่ง่ายกว่า: ติดตั้ง Ruby ด้วย Homebrew/version manager → Bundler ที่มาด้วยจะ setup env ถูกต้อง
ใช้ Ruby เวอร์ชันล่าสุด
เริ่มโปรเจกต์ใหม่ → ใช้ Ruby ล่าสุด (ตอนเขียนคือ 3.0)
System Ruby บน Catalina/Big Sur = Ruby 2.6.3 (เก่า) เริ่มต้นใหม่ → ติดตั้ง Homebrew ใช้ Ruby 3.0 โปรเจกต์ต่อไปอาจต้อง version manager จัดการหลายเวอร์ชัน
macOS หลัง Big Sur
macOS Big Sur เป็นปัจจุบัน Apple แจ้ง:
"Scripting language runtimes เช่น Python, Ruby, Perl รวมอยู่ใน macOS เพื่อความเข้ากันได้กับซอฟต์แวร์เก่า เวอร์ชันอนาคตจะไม่รวมไว้โดยค่าเริ่มต้น อาจต้องติดตั้งแพ็กเกจเพิ่ม"
อ่านที่นี่ปลาย 2021 System Ruby อาจหายไปแล้ว ถ้ายังไม่หาย → เตรียมติดตั้ง Ruby ผ่าน Homebrew หรือ version manager
เพลิดเพลินกับ Ruby
นักพัฒนาที่จะสร้างเว็บด้วย Rails มีคู่มือ "Install Rails on a Mac" ขยายจาก Install Ruby on a Mac เลือก version manager รองรับ Node และ Ruby
เพลิดเพลินกับการเขียนโค้ด Ruby! ภาษาที่เพื่อ "programmer happiness" แต่จำไว้: System Ruby มีไว้ให้ macOS ไม่ใช่ให้คุณ