Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

7 Ruby Gem Mạnh Mẽ Bạn Có Thể Chưa Biết

Gem Ruby nào tốt nhất cho dự án Rails của bạn? Đó là điều bạn sẽ khám phá trong bài này!

Tôi sẽ cho bạn 7 gem, nhưng không phải những gem cũ kỹ bạn đã thấy hàng triệu lần, tôi sẽ chia sẻ những gem rất hữu ích nhưng ít người biết.

Nhưng trước hết... Một lời cảnh báo.

Tôi thấy dev kéo gem cho gần như mọi thứ. Nếu nghe có vẻ hữu ích chỉ chút. Không suy nghĩ xem gem đó có giải quyết vấn đề của họ, có phải lựa chọn tốt nhất, được maintain & document tốt không. Đó là sai lầm.

Tại sao? Vì càng nhiều thứ dự án phụ thuộc, càng dễ vỡ khi mọi thứ thay đổi. Và mọi thứ thay đổi LUÔN LUÔN. Phiên bản Rails mới, Ruby mới, tính năng mới, v.v.

Cùng nói vậy... Gem có thể tiết kiệm nhiều việc, giúp code sạch, tránh lỗi bảo mật, nên hãy dùng khôn ngoan!

Bây giờ: Hãy vào danh sách.

1. Tìm Route Chết Để Giữ Code Sạch

Khi ứng dụng Rails lớn dần, bạn tích lũy nhiều route hơn. Bạn thay đổi code & những route này trở nên lỗi thời. Không còn cần thiết... Nhưng chúng ở đó, trong config/routes.rb, làm cho nó khó quản lý.

Làm sao biết route nào để xóa? Có gem tên traceroute. Nó load route & so sánh với action controller bạn đã định nghĩa.

Nhưng hiện tại nó có 2 hạn chế:

  1. Không hoạt động với Rails 6
  2. Không phát hiện implicit controller action

Tôi đã gửi pull request thêm hỗ trợ Rails 6, cũng tự viết phiên bản không có hạn chế này. Bạn tìm thấy ở đây.

2. Làm Migration An Toàn Hơn Để Tránh Vấn Đề

Rails migration gây nhiều vấn đề nếu làm sai. Ví dụ: Xóa cột gây lỗi vì Rails cache cột, chạy migration không reset cache. Ví dụ khác: Thêm index trên PostgreSQL khóa toàn bảng cho đến khi xong. Không tốt cho user. App không phản hồi request cần bảng bị khóa.

Tin tốt? Bạn không cần nhớ tất cả. Với gem strong_migrations, bạn sẽ biết khi có migration không an toàn trước khi vào production.

3. Ngăn Chặn Transaction Không An Toàn

Rails transaction là phép toán "all or nothing". Nhưng nếu bạn làm việc nằm ngoài kiểm soát transaction, như ghi file, gọi API, thì hiệu ứng "all or nothing" không còn đúng. Dẫn đến nhiều vấn đề.

Giải pháp? Không high-tech, chỉ tránh "side effects", hay làm việc ảnh hưởng "ngoài thế giới" của transaction. Gem isolator giúp audit transaction đảm bảo an toàn. Cài gem, nó sẽ raise exception khi phát hiện transaction xấu. Hãy thử!

4. Tìm Test Chậm & Làm Nhanh Lên

Test chậm không vui. Nhưng có công cụ tìm ra tại sao test chậm để fix! Công cụ là combo test-prof + ruby-prof.

Cách dùng:

 TEST_RUBY_PROF=1 rake 

Kết quả:

 %self   total   self    wait   child   calls   name
43.21  2.001  2.001  0.000  0.000  1      Kernel#sleep
2.97   0.184  0.138  0.000  0.046  1640   Array#permutation
1.39   0.064  0.064  0.000  0.000  144    PG::Connection#async_exec 

Tôi thấy rõ lời gọi sleep, nhưng dễ dàng là API call, đọc file lớn, slow SQL query, v.v. Còn có thể dùng event profiler.

Như sau:

 EVENT_PROF='sql.active_record' EVENT_PROF_EXAMPLES=1 rake 

Giúp tìm test chạy query chậm nhất. Ngoài ra, Rails 6 thêm parallel testing, phải enable trong test/test_helpers.rb nếu upgrade project.

5. Làm Dữ Liệu Nhất Quán Hơn

Validation tuyệt vời. Nhưng không quan trọng framework nào bạn dùng. Bạn luôn có thể bypass validation bằng import data trực tiếp vào DB, tạo record bằng raw SQL, hoặc dùng method ORM bỏ qua validation.

Nói cách khác... Validation chỉ bảo vệ khỏi lỗi user, không phải lỗi developer. Lỗi developer làm dữ liệu không nhất quán.

Tin tốt? Hầu hết modern SQL DB implement "constraints", quy tắc như validation nhưng ở cấp DB. Muốn tăng tính nhất quán dữ liệu, hãy implement constraints. Gem database_consistency giúp.

Cách dùng? Cài gem, chạy bundle exec database_consistency trong terminal project. Sẽ ra báo cáo như:

 fail Comment title column should be required in the database
fail Comment author column should be required in the database 

Tiếp theo? Thêm constraint DB thiếu, trường hợp này là not-null, bằng migration change_column_null.

6. Thời Gian Refactor! Ai Là Kẻ Phạm Tội Xấu Nhất Trong Code?

Muốn cải thiện code nhưng không biết bắt đầu đâu? Lấy một số metric! Nhiều code metric, như cyclomatic complexity & churn. Churn xem tỷ lệ thay đổi theo thời gian trong code. Dùng git history. Kết quả: danh sách file thay đổi nhiều nhất. Nếu bạn dành 90% thời gian sửa model User... Nó chắc là file LỚN với phương thức DÀI. Ứng viên tuyệt vời cho refactor!

Gem giúp tìm file thay đổi liên tục là attractor.

Chạy như sau:

 attractor report -p app 

Nó tạo báo cáo HTML, và danh sách file high-churn để tập trung refactor. Hay lắm!

7. Tìm Ra Code Nào Được Dùng Trong Production & Nào Không

Kết thúc với công cụ cải thiện code khác. Tên là coverband. Chạy gem này trong production (overhead thấp), bạn nhận coverage report code nào đang chạy. Thậm chí track unused view!

7 Ruby Gem Mạnh Mẽ Bạn Có Thể Chưa Biết

Giúp ra quyết định khi xóa code & dọn dẹp project. Đừng để code không dùng tích tụ!

Tóm Tắt

Bạn đã học 7 gem mạnh & ít biết cho dự án (chủ yếu Rails) để test nhanh hơn, cải thiện code & tăng an toàn. Nhớ cảnh báo nhỏ về lạm dụng gem, nhưng đừng để đó cản bạn thử gem mới.

Nếu muốn nâng cao kỹ năng Ruby & ủng hộ blog, cân nhắc mua cuốn sách Ruby Deep Dive của tôi. 🙂

Cảm ơn bạn đã đọc!