Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Mac

หลีกเลี่ยง macOS System Ruby: เลือกทางเลือกที่ถูกต้อง

ใครบอกว่า "อย่าใช้ 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 ไม่ใช่ให้คุณ