12/08/2018, 13:05

Rails 5.0.0.beta1: Action Cable, API mode, Rails command

Dịch từ nguồn tiếng Anh: Rails 5.0.0.beta1: Action Cable, API mode, Rails command Tham khảo bản dịch tiếng Nhật: Rails 5.0で追加される主な新機能(Ruby on Rails公式ブログより) Lời mở đầu Bạn có tin được không, Rails 5.0 đã rất gần. Chúng ta chỉ vừa mới kỷ niệm 10 năm Rails 1.0 được ít ngày. Thời gian vui vẻ khi ...

Dịch từ nguồn tiếng Anh: Rails 5.0.0.beta1: Action Cable, API mode, Rails command

Tham khảo bản dịch tiếng Nhật: Rails 5.0で追加される主な新機能(Ruby on Rails公式ブログより)

Lời mở đầu

Bạn có tin được không, Rails 5.0 đã rất gần. Chúng ta chỉ vừa mới kỷ niệm 10 năm Rails 1.0 được ít ngày. Thời gian vui vẻ khi chúng ta ở bên bạn bè thường trôi qua thật nhanh và trong cộng đồng Rails, chúng ta đã có những khoảng thời gian cùng nhau không thể tuyệt vời hơn nên không có gì là lạ khi Rails 5.0.0.beta1 đã được realesed. Dù đây chỉ là bản beta đầu tiên nhưng bản này đã đang chạy Basecamp 3 trên production.

Action Cable

Một thay đổi lớn trong Rails 5.0 là một framework mới để quản lý WebSockets được gọi là Action Cable. Nó là một giải pháp tích hợp bao gồm vòng lặp kết nối mạnh mẽ EventMachine, lớp các kênh thread-backed cho xử lý phía server và lớp JavaScript cho tương tác phía client. Framework này rất dễ sử dụng và hỗ trợ các chức năng tương tác như chat, thông báo rất tốt. Bạn có thể thử nghiệm các chức năng này trên Basecamp 3.

Điểm thú vị nhất của Action Cable là bạn có thể truy cập đến tất cả các Active Record và PORO domain model trong WebSockets work. Các tác giả còn đưa thêm vào hệ thống ActionController::Renderer giúp bạn dễ dàng render các templates của bạn bên ngoài controllers, khi bạn muốn tái sử dụng các templates phía server cho các đáp ứng WebSocket.

Trong môi trường development, Action Cable chạy in-process với các phần còn lại của ứng dụng của bạn. Để làm thế, chúng tôi đã chuyển server development mặc định từ Webrick sang Puma. Trong môi trường production, bạn có thể chạy các server Action Cable ở trên các process riêng của nó (Chúng tôi đang chạy như thế trên Basecamp) Phần phát triển này có đóng góp rất lớn của Pratik Naik và Javan Makhmali.

API mode

Rails không chỉ là một lựa chọn tuyệt vời khi bạn muốn xây dựng một ứng dụng full-stack sử dụng render phía server của các template HTML, mà còn là một ứng cử viên sáng giá cho các ứng dụng Javascript phía client hoặc các ứng dụng native chỉ cần dùng backend để xử lý JSON. Chúng tôi đã chú trọng phát triển khía cạnh này với --api mode mới. Nếu bạn tạo ra một ứng dụng Rails mới sử dụng backend --api mới, bạn sẽ có một cấu hình gọn nhẹ cho phép bạn làm việc với JSON, không chỉ HTML.

Tất nhiên, chúng tôi còn rất nhiều việc phải làm với chức năng này, nhưng chúng tôi đã có khởi đầu tốt. Ở chế độ mặc định, API mode chỉ phụ thuộc vào gọi #to_json trên các model class. Nhưng bạn có thể sử dụng Jbuilder, Active Model Serializers hoặc tham khảo JSONAPI::Resources để biết các giải pháp khác. Đặc biệt cảm ơn Santiago Pastorino và Jorge Bejar vì những cống hiến cho sự phát triển này.

Một lệnh Rails quản lý tất cả

Tại sao một số lệnh nằm trong bin/rails trong khi một số khác lại nằm trong bin/rake? Đó là một câu hỏi thường xuyên được đặt ra, đặc biệt là với những người mới làm quen với Rails và chúng ta chưa bao giờ có câu trả lời hay cho vấn đề này (chỉ là các nguỵ biện về kỹ thuật). Và giờ thì chúng tôi cam kết biến bin/rails thành một lệnh master để quản lý tất cả. Tất cả các lệnh rake của bạn đều có thể dùng với lệnh này trong một tương lai gần (vài tháng). Bạn sẽ làm quen với việc gõ lệnh bin/rails db:migrate thay vì bin/rake db:migrate.

Kasper Timm Hansen đang phụ trách dự án này.

Một số trọng điểm khác

API các thuộc tính mới phát triển bởi Sean Griffin.

Test runner bây giờ báo cáo các lỗi inline và do đó bạn không cần phải đợi kết thúc test suite mới xem được các lỗi xảy ra.

ApplicationRecord được sinh ra như là class cha mặc định của tất cả các model sinh ra bởi các generators.

ActiveRecord::Relation#in_batches giúp chúng ta xử lý record trong các batch với phụ tải memory ít hơn.

Post.where('id = 1').or(Post.where('id = 2')) cho bạn chính xác điều bạn muốn.

Khi statement cuối false, sẽ không còn bị tạm ngừng bất ngờ các Active Record callbacks Giờ bạn có thể dùng throw(:abort) để dừng.

Bạn cũng hãy xem qua các CHANGELOGs, có rất nhiều điểu thú vị về framework lần này.

Action Mailer CHANGELOG

Action Pack CHANGELOG

Action View CHANGELOG

Active Model CHANGELOG

Active Record CHANGELOG

Active Support CHANGELOG

Active Job CHANGELOG

Railties CHANGELOG

Claudio đã làm một slide nhỏ về các cải tiến ưa thích của anh ấy:

Cũng chú ý thêm là chúng tôi đang làm việc với Turbolinks 5 - các thực thi với đóng gói native iOS và Android để cùng release với Rails 5. Bạn có thể theo dõi trên basecamp/turbolinks/v5.

Quá trình bảo trì

Như quy định bảo trì của chúng tôi, việc release Rails 5.0 sẽ có nghĩa là các sửa lỗi sẽ chỉ áp dụng cho 5.0.x, các vấn đề bảo mật thông thường cho 5.0.x và 4.2.x và cung cấp cả các khắc phục cho các vấn đề bảo mật đến 5.0.x và 4.2.x (Khi ra 5.1 thì sẽ là 5.1.x, 5.0.x, và 4.2.x). Điều đó có nghĩa là 4.1.x và các phiên bản dưới đó sẽ không được hỗ trợ. Ruby 2.2.2+ cũng là bản được hỗ trợ duy nhất cảu Ruby for Rails.

Hãy giúp các tác giả làm cho Rails 5.0 ổn định

Chúng tôi dựa trên các phản hổi của tất cả mọi người trong cộng đồng để sửa lỗi và nâng cấp lên phiên bản này. Vì thế hãy thử dùng Rails 5.0 cho ứng dụng của bạn. Và nếu bạn bắt đầu một ứng dụng mới ngày hôm nay, hãy cho beta1 một cơ hội. Các bạn có thể đăng ký các vấn đề trên Github

Đã có 789 người đóng góp cho lần release này của Rails. Hãy trở thành một trong số họ.

Eileen M. Uchitelle và Sean Griffin phụ trách lần release này. Người merge PR là Rafael França!

0