Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Mac

Tại sao tránh System Ruby trên macOS: Chọn đúng phương án thay thế

Ai đó có thể đã nói: "Đừng dùng system Ruby." Lời khuyên tốt, nhưng tại sao? Hãy tìm hiểu.

Bạn đang dùng Ruby nào?

macOS cài sẵn "system Ruby".

Dùng lệnh which xem Ruby cài ở đâu:

$ which ruby
/usr/bin/ruby

Nếu thấy /usr/bin/ruby, đó là system Ruby cài sẵn của macOS.

Dùng system Ruby cho script sysadmin là ổn, miễn không thay đổi nó (cập nhật hoặc thêm gems).

Nhưng không nên dùng cho phát triển dự án Ruby.

Ruby cho phát triển

Để phát triển dự án Ruby, hãy cài Ruby qua Homebrew hoặc dùng version manager như asdf, chruby, rbenv, rvm.

Version manager giúp khi bạn quản lý nhiều dự án không thể cập nhật cùng lúc. Xem bài "Install Ruby on a Mac" để so sánh version manager và cách cài tốt nhất.

Nhưng tại sao không dùng Ruby mặc định macOS? Xem lý do tại sao dùng system Ruby cho phát triển là ý tưởng tồi.

Rắc rối cài Gem

RubyGems là thư viện sẵn có giúp phát triển Ruby dễ dàng, thú vị. Hầu hết dự án Ruby dùng ít nhất vài gem.

Nếu dùng system Ruby, chạy gem install sẽ cố lưu gem vào thư mục system Ruby /Library/Ruby/Gems/2.6.0. Thư mục này thuộc sở hữu root (siêu người dùng hệ thống). User thường không có quyền ghi (và bạn thực sự không nên sửa thư mục này).

Nếu thử cài gem, ví dụ gem install rails, bạn gặp lỗi quyền:

ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory

Vi phạm bảo mật hệ thống

Hệ thống Unix-based mạnh mẽ, nên có cách vượt qua. Bạn có thể cài gem bằng superuser để ghi đè hạn chế quyền. Nhưng đừng làm vậy!

$ sudo gem install rails

Bất kỳ lúc nào sắp chạy sudo, hãy dừng lại tự hỏi: "Tôi có đang bắn vào chân mình không?"

Trường hợp này cần sudo vì bạn đang sửa file hệ thống do OS quản lý. Đừng làm! Bạn có thể để hệ thống bị hỏng hoặc bị xâm phạm. Tệ hơn, gem có thể chứa mã độc can thiệp máy tính.

Quản lý Gem

Lập trình viên giỏi dùng Bundler để cài gem và quản lý phụ thuộc.

Hãy tưởng tượng: dự án dùng các phiên bản khác nhau của một gem (có bản phát hành mới giữa các dự án). Hoặc hai gem khác nhau trong dự án phụ thuộc vào phiên bản khác của gem phụ thuộc.

Bundler dùng Gemfile trong thư mục dự án theo dõi gem cần thiết. Nếu bạn dùng sudo cài gem với system Ruby, bạn sẽ có đống gem không tương thích trong thư mục system Ruby.

Bạn có thể vượt qua vấn đề quyền bằng cách cài Bundler với lệnh dùng thư mục home cho gem. Nhưng dễ hơn: cài Ruby qua Homebrew hoặc version manager, dùng Bundler đi kèm — nó sẽ thiết lập đúng môi trường phát triển cục bộ.

Dùng Ruby mới nhất

Khi bắt đầu dự án, dùng bản phát hành Ruby mới nhất (lúc viết là 3.0).

System Ruby trên macOS Catalina hoặc Big Sur là Ruby 2.6.3 — đã cũ. Nếu mới bắt đầu Ruby, cài qua Homebrew và làm việc với Ruby 3.0. Khi bắt đầu dự án khác, có thể cần cài version manager để chuyển đổi giữa các dự án dùng Ruby khác phiên bản.

macOS sau Big Sur

macOS Big Sur là phiên bản hiện tại. Apple tuyên bố:

"Các runtime ngôn ngữ kịch bản như Python, Ruby, Perl được bao gồm trong macOS để tương thích phần mềm cũ. Phiên bản macOS tương lai sẽ không bao gồm runtime ngôn ngữ kịch bản mặc định, và có thể yêu cầu cài thêm gói."

Nếu đọc bài này cuối 2021, system Ruby có thể đã biến mất. Nếu chưa, hãy chuẩn bị bằng cách cài Ruby qua Homebrew hoặc version manager.

Thưởng thức Ruby

Dành cho lập trình viên xây dựng ứng dụng web với Rails, tôi viết hướng dẫn "Install Rails on a Mac" — đi xa hơn "Install Ruby on a Mac" để chỉ cách chọn version manager làm việc với cả Node và Ruby.

Hãy tận hưởng niềm vui coding bằng Ruby! Nó được biết là ngôn ngữ dành cho hạnh phúc của lập trình viên. Nhưng nhớ: system Ruby dành cho macOS, không dành cho bạn.