12/08/2018, 15:23

Top 57 Gem được sử dụng ở RubyGarage (Phần 2)

APIs API là tập các yêu cầu để trao đổi dữ liệu giữa các ứng dụng. Bạn có thể đăng nhập vào các cửa hàng trực tuyến bằng tài khoản Facebook của bạn nhờ các API hoặc tìm các nhà hàng gần đó trên Foursquare qua Google Maps - cũng nhờ API. Xây dựng API đôi khi có thể rất khó khăn nhưng vài trường ...

APIs

API là tập các yêu cầu để trao đổi dữ liệu giữa các ứng dụng. Bạn có thể đăng nhập vào các cửa hàng trực tuyến bằng tài khoản Facebook của bạn nhờ các API hoặc tìm các nhà hàng gần đó trên Foursquare qua Google Maps - cũng nhờ API. Xây dựng API đôi khi có thể rất khó khăn nhưng vài trường hợp khác chỉ bằng vài dòng code, bạn đã có API riêng cho mình.

Nhờ nhiều gem hiện có cho các API, bạn không cần phải làm quá nhiều cho việc xây dựng API. Một gem giúp tiết kiệm thời gian tuyệt vời là ActiveModelSerializers. Bên cạnh đó còn có Apipie-lanils - một DSL để ghi lại các API RESTful. Apipie mô tả đúng mã với cú pháp Ruby nên rất thuận tiện trong việc sử dụng.

Security

Khi phát triển ứng dụng lưu trữ thông tin cá nhân hoặc thông tin tài chính của người dùng, điều quan trọng là phải đảm bảo an toàn dữ liệu.

Brakeman là một máy quét tĩnh xác định lỗ hổng trong các ứng dụng Rails. Bạn có thể dễ dàng cấu hình các thông báo để chỉ nhận những thông báo cần thiết.

Trong trường hợp nếu bạn muốn kiểm tra gem của ứng dụng cho các lỗ hổng, hãy thử bundler-audit, chạy trên đầu trang Bundler. Với bundler-audit , bạn có thể tiết kiệm được rất nhiều thời gian vì nó kiểm tra tệp gemfile.lock của bạn để tìm lỗ hổng ở các phiên bản gem đã cũ và ngăn việc tải về không đáng tin cậy.

Các gem về việc áp dụng các tiêu đề an ninh liên quan đến HTTP, phản hồi ứng của ứng dụng Rails là Secure Headers. Secure Headers cho phép bạn áp dụng các tiêu đề như CSP để ngăn chặn các cuộc tấn công cross-site scripting, mixed-content attacks và XFO để ngăn chặn ứng dụng của bạn khỏi các cuộc tấn công clickjacking.

Payments

Nếu bạn xây dựng một giải pháp thương mại điện tử, chắc chắn bạn sẽ cần cung cấp các tùy chọn thanh toán nhanh, an toàn và tiện lợi.

Active Merchant là một thư viện từ những người sáng tạo Shopify; cung cấp một API tập trung để tích hợp với nhiều cổng thanh toán phổ biến. Thư viện mã nguồn mở này được duy trì bởi Shopify và hiện đang hỗ trợ 145 cổng thanh toán có sẵn trên toàn cầu.

Vì Active Merchant là một thư viện lớn, có thể làm chậm hiệu suất của ứng dụng nên để hiệu quả hơn cho từng công thanh toán như PayPal, Stripe và Braintree, bạn có thể thử sử dụng: Braintree Ruby và Stripe Ruby Bindings để tăng hiệu suất cho ứng dụng.

Deployment

Deployment là một giai đoạn quan trọng khi ứng dụng web của bạn đã hoàn thành. Có vô số máy chủ web có thể lưu trữ các ứng dụng web Rails. Ví dụ, Puma và Unicorn là các máy chủ web HTTP phổ biến thường được sử dụng để deploy các ứng dụng Rails. Và khi nói đến việc deploy các ứng dụng web trên các máy chủ cụ thể này, chúng tôi chỉ sử dụng Puma và unicorn-rails gem.

Một ứng dụng web đi qua nhiều bước trước khi triển khai bao gồm sao chép tệp, di chuyển cơ sở dữ liệu và assets. Những công việc tẻ nhạt này có thể được hoàn thành bằng công cụ deploy tự động - Capistrano. Capistrano xử lý nhiều hoạt động bao gồm các máy chủ gắn thẻ cho các vai trò khác nhau, xử lý nhiều giai đoạn và thực hiện các deploy song song. Capistrano hoạt động hiệu quả với Chef, thiết lập và quản lý một máy chủ bằng cách cài đặt các gói, đưa các tệp vào các vị trí xác định...

Uploading Files

Thường chúng ta xây dựng các ứng dụng web cho phép người dùng tải lên các tệp tin khác nhau: tài liệu, hình ảnh, âm thanh và video. Và khi nói đến hình ảnh , một trong những giải pháp hiệu quả nhất hiện có là CarrierWave gem. CarrierWave như là một một bộ xử lý hình ảnh có thể crop hoặc resize ảnh. Hơn nữa, CarrierWave lưu trữ các tệp tin (vì vậy người dùng không phải tải lên lại tệp trong trường hợp có lỗi gì đó) và xử lý các tệp, do đó bạn có thể trích xuất dữ liệu EXIF hoặc phân tích các tệp văn bản đã tải lên.

Minimagick là một loại gem xử lý hình ảnh khác. Minimagick hiệu quả trong việc tiết kiệm tài nguyên RAM của bạn và các nhiệm vụ khác nhau như resize, xoay, lật, làm mờ, cũng như chuyển đổi sang các định dạng hình ảnh phổ biến, bao gồm cả PNG.

Cuối cùng, bạn có thể muốn tải lên và lưu trữ các tệp của mình trên các máy chủ bên ngoài như S3 của Amazon hoặc Google’s Cloud Storage. Trong trường hợp này, chúng tôi sử dụng Fog gem, làm việc với nhiều dịch vụ đám mây bao gồm AWS, Rackspace Servers và Brightbox.

Scheduled and Recurring Jobs

Các background jobs trong các ứng dụng Ruby được xử lý bên ngoài luồng request/response bình thường và là các thao tác trong hàng đợi, được thực hiện lần lượt. Xử lý các background jobs là rất quan trọng cho hiệu suất của một ứng dụng. Để cung cấp cho bạn một ví dụ sinh động, hãy tưởng tượng chúng tôi xây dựng ứng dụng gửi email tới người dùng sau khi đăng ký. Rõ ràng, một email nên được gửi nhanh nhất có thể: tất cả chúng ta không muốn đợi chờ. Để tăng tốc độ, chúng tôi cần phải thúc đẩy background jobs cho các hoạt động như gửi email, nhập dữ liệu, gọi các API của bên thứ ba và thay đổi kích thước hình ảnh...

Ví dụ, đối với các công việc theo kế hoạch, đội RubyGarage sử dụng thư viện Sidekiq Redis hỗ trợ sử dụng Redis như một cửa hàng quản lý công việc. Loại gem này gây ấn tượng với các developer với khả năng đa luồng, dẫn đến tốc độ ấn tượng. Các lợi ích khác bao gồm giám sát thuận lợi về tình trạng công việc và công việc song song.

Tiếp theo, một trong những công cụ xử lý background job phổ biến nhất là Resque. Resque là một công cụ mạnh mẽ để quản lý background job tương tự như Sidekiq. Nhưng Resque và Sidekiq thực hiện công việc nền bằng nhiều cách khác nhau. Resque chỉ sử dụng quy trình đơn luồng, trong khi Sidekiq xử lý các quy trình đa luồng, đó là lý do tại sao phải mất nhiều bộ nhớ để Resque xử lý các hàng đợi.

Một thư viện xử lý nền hữu ích nữa là Sucker Punch, lấy cảm hứng từ gem girl_friday. Sucker Punch khác với các giải pháp tương tự vì nó chạy bên trong quy trình của ứng dụng, vì vậy nó không đòi hỏi bất kỳ sự phụ thuộc nào (như Sidekiq đòi hỏi Redis). Theo GitHub, Sucker Punch có hiệu quả khi làm việc trên các nhiệm vụ nhỏ như nhật ký và email; Tuy nhiên, trong trường hợp lỗi hệ thống khi ứng dụng của bạn được khởi động lại, các background job của bạn bị mất.

Search

Hầu hết các ứng dụng web yêu cầu chức năng tìm kiếm tích hợp. Để tăng hiệu quả cho ứng dụng của bạn trong việc tìm kiếm, bạn có thể tham khảo 1 vài gem dưới đây.

Elasticsearch là công cụ tìm kiếm phổ biến cho các doanh nghiệp. Bằng cách tận dụng Elasticsearch, bạn có thể thực hiện tìm kiếm trên trang web, chỉ mục danh mục hàng hoá (nếu bạn đang chạy một cửa hàng thương mại điện tử), cho phép tự động chèn dữ liệu, phát triển giải pháp thông báo giá bằng cách lập chỉ mục giá, lưu trữ giao dịch và hành động, và phân tích và lấy dữ liệu để có được thống kê toàn diện. Chúng tôi sử dụng Elasticsearch gem để tích hợp trong các ứng dụng Rails.

Một gem khác, kết nối Active Record với công cụ tìm kiếm toàn văn được gọi là Sphinx, là Thinking Sphinx. Với Thinking Sphinx, bạn có thể sử dụng các tính năng của Sphinx để debug và tìm kiếm test, lập chỉ mục và nhiều hơn nữa.

"Awesome", "great", "amazing" - đây là những từ mà các developer của chúng tôi sử dụng để mô tả Ransack gem. Ransack được các Ruby developer đánh giá cao bởi vì nó giúp họ tạo các mẫu tìm kiếm thông minh và đơn giản, nhưng hiện đại. Thật không may, hiện nay gem không được duy trì trên GitHub. Nhưng điều này không dừng lại sự nổi tiếng của nó.

Cuối cùng, để cho phép tìm kiếm toàn văn trong cơ sở dữ liệu PostgreSQL, chúng tôi sử dụng PgSearch gem.

Environment Variables

Lưu trữ cấu hình ứng dụng trong các biến môi trường là một thực tiễn được sử dụng rộng rãi có nguồn gốc từ nguyên tắc của một ứng dụng mười hai yếu tố; Bằng cách đó, bạn có thể giữ dữ liệu nhạy cảm như mật khẩu hoặc API key bên ngoài repository, nhưng dữ liệu vẫn có sẵn trong quá trình thực hiện. Tuy nhiên, đôi khi nó không hiệu quả để đặt các biến môi trường trên một máy phát triển hoặc một máy chủ tích hợp liên tục để chạy nhiều dự án. Dotenv gem tải các biến môi trường từ một dotfile, có thể được đặt bên ngoài gốc của dự án của bạn. Do đó, bạn có thể giữ bí mật ứng dụng của mình.

Admin Panel

Là chủ sở hữu trang web hoặc quản trị viên, bạn cần một trang tổng quan nơi bạn có thể quản lý trang web của mình. Trong thế giới Ruby, hai công cụ quản trị viên phổ biến nhất là Active Admin và RailsAdmin. Cả Active Admin và RailsAdmin đều cung cấp cho người dùng các tính năng tiên tiến bao gồm xuất dữ liệu sang CSV, JSON và XML, tìm kiếm và lọc theo loại, cũng như phân biệt vai trò người dùng. Mặc dù 2 gem này có nhiều tính năng chung, nhưng chúng thực sự khác nhau. RailsAdmin sẵn sàng sử dụng ngay sau khi cài đặt, trong khi Active Admin yêu cầu sửa đổi và tùy chỉnh theo cách thủ công.

Một gem cuối cùng Administrate có ích khi cần thiết phải thay thế Active Admin và RailsAdmin. Administrate tạo bảng điều khiển quản trị dễ dàng tùy chỉnh ngay cả đối với người dùng không biết kỹ thuật.

View Helper

Gần đây, xu hướng đã được hướng tới việc giữ các models, views, and controllers càng "gầy" càng tốt. Vì vậy, làm thế nào chúng ta có thể giữ tất cả mọi thứ "gầy"? View Helpers là các mô-đun có chứa các phương pháp giúp bạn viết code DRY (Do not Repeat Yourself), sạch sẽ và có thể maintain. Hãy nhìn vào một vài gem sẽ giúp bạn tiết kiệm được nhiều thời gian.

Trong Rails, chúng ta có đối tượng ở khắp mọi nơi. Draper giúp bạn làm sạch mọi thứ bằng một cách tiếp cận hướng đối tượng bằng cách thêm, thay thế, hoặc mở rộng hành vi của một đối tượng.

Simple Form là một gem như tên của nó: giúp bạn tạo ra các form cho các ứng dụng Rails của bạn. Tóm lại, Simple Form giúp các nhà phát triển viết tạo dropdown lists nhanh chóng và cung cấp sự linh hoạt tuyệt vời khi làm việc với các checkbox và radio button. Nó thậm chí có thể giúp bạn quốc tế hóa các yếu tố của form.

Một loại gem hữu ích là MetaTags, giúp bạn tạo các ứng dụng Rails thân thiện với SEO bằng cách thêm View Helpers cho thẻ meta. MetaTags làm cho việc quản lý SEO hiệu quả bằng cách tạo ra các thẻ meta trong tốt nhất về SEO.

Cuối cùng, khi phát triển giải pháp thương mại điện tử, chúng ta cần xem xét chuyển đổi tiền tệ và tiền tệ. Money-Rails gem giải quyết những công việc này trong ứng dụng Rails của bạn bằng cách tích hợp với Money gem. Các Money-Rails gem cung cấp một số lợi ích hơn các Money gem, chẳng hạn như một lớp tiền, giá trị tiền tệ, và chuyển đổi tiền tệ

Conclusion

Đây là cách thực hành chuẩn để sử dụng gem Ruby khi làm việc với các ứng dụng Ruby on Rails. Gem giải quyết hầu hết các vấn đề phổ biến trong các ứng dụng Rails. Gem Ruby cũng loại bỏ sự cần thiết phải xây dựng các giải pháp của riêng bạn cho từng ứng dụng. Tuy nhiên, gem không phải thể giải quyết cho tất cả các vấn đề của bạn. Gem giống như thực phẩm đông lạnh từ cửa hàng; sẵn sàng để sử dụng nhưng bạn không thể ăn chúng ngay lập tức. Sử dụng gem thường xuyên nhưng hãy nhớ, đọc, hiểu bản chất mới là điều 1 developer cần!

0