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

Rails 7 ra mắt:Các tính năng chính và những cải tiến sắp tới

Rails 7 sắp ra mắt. Chúng tôi chưa xác nhận ngày phát hành nhưng dự kiến nó sẽ ra mắt trước Giáng sinh, vì vậy sẽ không còn lâu nữa. Phiên bản mới nhất kể từ khi bài đăng này được xuất bản là 7.0.0.rc1 , ứng cử viên phát hành đầu tiên. Basecamp, HEY, Github và Shopify đều đã chạy Rails 7 alpha trong quá trình sản xuất, vì vậy chúng tôi có thể kỳ vọng ngay cả ứng cử viên phát hành cũng sẽ khá ổn định.

Trong bài đăng này, chúng ta sẽ xem xét một số tính năng và thay đổi mới mà Rails 7 sẽ mang lại.

Không cần nút và gói web

Vâng, bạn đọc đúng rồi! JavaScript trong Rails 7 sẽ không còn yêu cầu NodeJS hoặc Webpack nữa. Và bạn vẫn có thể sử dụng gói npm.

Việc dịch ES6 bằng Babel và đóng gói với Webpack yêu cầu nhiều thiết lập. Mặc dù Rails hỗ trợ nó khá tốt với Webpacker gem, điều này mang lại nhiều rắc rối, khó hiểu và khó thực hiện bất kỳ thay đổi nào, đặc biệt là trong khi vẫn duy trì khả năng nâng cấp.

Giờ đây, mặc định cho các ứng dụng mới được tạo bằng rails new là sử dụng bản đồ nhập thông qua importmaps-rails gem.Thay vì viết package.json và cài đặt các phần phụ thuộc bằng npm hoặc yarn , bạn sử dụng ./bin/importmap CLI để ghim (hoặc bỏ ghim hoặc cập nhật) các phần phụ thuộc.

Ví dụ:để cài đặt date-fns :

 

Điều này sẽ thêm một dòng trong config/importmap.rb như:

 

Trong mã JavaScript của mình, bạn có thể tiếp tục sử dụng mọi thứ như trước đây:

 

Một điều cần lưu ý với thiết lập này là không có sự dịch mã giữa những gì bạn viết và những gì trình duyệt nhận được. Đối với hầu hết các trường hợp, điều này không sao cả vì tất cả các trình duyệt quan trọng hiện đều hỗ trợ ES6 ngay từ đầu.

Nhưng điều này cũng có nghĩa là bạn sẽ không thể sử dụng TypeScript hoặc JSX vì chúng yêu cầu chuyển mã sang JS trước khi sử dụng.

Vì vậy, nếu bạn muốn sử dụng React với JSX, bạn vẫn phải quay lại thiết lập khác (sử dụng webpack/rollup/esbuild).

Rails 7 có thể làm điều này cho bạn. Tất cả những gì bạn cần là một lệnh với chiến lược bạn đã chọn:

 

Turbolinks và UJS được thay thế bằng Turbo và Stimulus

Các ứng dụng được tạo bằng Rails 7 sẽ nhận được Turbo và Stimulus (từ Hotwire) theo mặc định, thay vì Turbolinks và UJS. Hotwire là một phương pháp mới cung cấp các bản cập nhật nhanh chóng cho DOM bằng cách gửi HTML qua mạng.

Mã hóa ở lớp cơ sở dữ liệu

Rails 7 cho phép đánh dấu các trường cơ sở dữ liệu nhất định là được mã hóa bằng encrypts phương pháp trên ActiveRecord::Base . Điều này có nghĩa là sau lần thiết lập đầu tiên, bạn có thể viết mã như thế này:

 

Bạn có thể tiếp tục sử dụng các thuộc tính được mã hóa giống như bất kỳ thuộc tính nào khác. Rails 7 sẽ tự động mã hóa và giải mã nó giữa cơ sở dữ liệu và ứng dụng của bạn.

Nhưng điều này có một điểm bất tiện nhỏ:bạn không thể truy vấn cơ sở dữ liệu theo trường đó trừ khi bạn chuyển deterministic: true tùy chọn cho encrypts phương thức.Chế độ xác định kém an toàn hơn chế độ không xác định mặc định, vì vậy chỉ sử dụng nó cho các thuộc tính bạn thực sự cần truy vấn.

Truy vấn không đồng bộ

Hiện tại có load_async phương pháp mà bạn có thể sử dụng khi truy vấn dữ liệu để tìm nạp kết quả ở chế độ nền. Điều này đặc biệt quan trọng khi bạn cần tải một số truy vấn không liên quan từ một hành động của bộ điều khiển. Bạn có thể chạy:

 

Điều này sẽ kích hoạt cả hai truy vấn trong nền cùng một lúc. Vì vậy, nếu mỗi truy vấn mất 200 mili giây thì tổng thời gian dành cho việc tìm nạp dữ liệu là ~200 mili giây thay vì 400 mili giây nếu chúng được tìm nạp tuần tự.

Chế độ Zeitwerk cho Rails 7

Đây là một thay đổi đột phá đối với các ứng dụng cũ vẫn chạy trình tải cổ điển. Tất cả các ứng dụng Rails 7 đều phải sử dụng chế độ Zeitwerk, nhưng việc chuyển đổi khá dễ dàng. Hãy xem hướng dẫn nâng cấp Zeitwerk đầy đủ.

Các bản cập nhật Rails 7 khác

Thử lại công việc không giới hạn số lần

ActiveJob hiện cho phép chuyển :unlimited dưới dạng attempts tham số trên retry_on . Rails sẽ tiếp tục thực hiện công việc mà không cần số lần thử tối đa.

 

Biến thể được đặt tên

Bây giờ bạn có thể đặt tên các biến thể trên ActiveStorage thay vì chỉ định kích thước trên mỗi lần truy cập.

 

Băm thuộc tính HTML

tag.attributes mới phương thức sử dụng trong các chế độ xem chuyển hàm băm thành thuộc tính HTML:

 

sẽ sản xuất

 

Ruby debug

Mặc định mới để gỡ lỗi đã thay đổi từ byebug tới debug đá quý.

Thay vì gọi byebug , bây giờ bạn cần gọi debugger trong mã để tham gia phiên gỡ lỗi.

Khẳng định một bản ghi duy nhất với sole

Khi truy vấn bản ghi, giờ đây bạn có thể gọi sole hoặc find_sole_by (thay vì first hoặc find_by ) khi bạn muốn khẳng định rằng truy vấn chỉ khớp với một bản ghi duy nhất.

 

Kiểm tra sự hiện diện/vắng mặt của Hiệp hội

Bây giờ chúng ta có thể sử dụng where.associated(:association) để kiểm tra xem bản ghi có liên kết hay không thay vì tham gia và kiểm tra sự tồn tại của id.

 

Truyền phát các tệp được tạo từ các hành động của bộ điều khiển

Bây giờ bạn có thể sử dụng send_stream bên trong một hành động của bộ điều khiển để bắt đầu truyền trực tuyến một tệp đang được tạo nhanh chóng.

 

Điều này cung cấp phản hồi ngay lập tức (một phần) cho người dùng để họ biết điều gì đó đang xảy ra và có thêm lợi ích nếu bạn triển khai trên Heroku.

Vì tệp sẽ bắt đầu phát trực tuyến ngay lập tức nên Heroku sẽ không ngắt kết nối. Điều này có nghĩa là bạn không cần phải thực hiện các tác vụ nền để tạo các tệp một lần mất hơn 30 giây.

Nâng cấp lên Rails 7

Cũng như các phiên bản trước của Rails, việc nâng cấp rất đơn giản. Mặc dù chúng tôi chưa có hướng dẫn nâng cấp chính thức nhưng các bước vẫn giữ nguyên:

  1. Thay đổi số phiên bản Rails trong Gemfile (7.0.0.rc1 kể từ ngày xuất bản) và chạy bundle update .
  2. Chạy bundle exec rails app:update . Thực hiện theo CLI tương tác và thêm/thay thế/sửa đổi các tệp theo yêu cầu.
  3. Chạy thử nghiệm và xác minh rằng mọi thứ đều hoạt động như mong đợi.

Kết thúc

Bạn có thể xem danh sách đầy đủ các bản sửa lỗi, tính năng và thay đổi trong ghi chú phát hành Rails 7. Hiện tại, những ghi chú này chưa đầy đủ nhưng chúng tôi có thể mong đợi chúng sẽ sớm được cập nhật.

Nếu bạn vẫn đang chạy Rails 6 hoặc thấp hơn, xin lưu ý rằng với bản phát hành cuối cùng của Rails 7, Rails 6.1 sẽ chuyển sang chế độ "chỉ vấn đề bảo mật" và sẽ không nhận được các bản sửa lỗi nữa. Điều này cũng sẽ đánh dấu EOL cho Rails 5.2 vì nó sẽ không nhận được bất kỳ bản sửa lỗi nào nữa.

Chúc bạn viết mã vui vẻ!

Tái bút. Nếu bạn muốn đọc các bài đăng của Ruby Magic ngay khi chúng được đăng tải, hãy đăng ký nhận bản tin Ruby Magic của chúng tôi và không bao giờ bỏ lỡ một bài đăng nào!

Rails 7 ra mắt:Các tính năng chính và những cải tiến sắp tới

Pulkit Goyal

Tác giả khách mời Pulkit của chúng tôi là kỹ sư và nhà tư vấn full-stack cấp cao. Khi rảnh rỗi, anh ấy viết về những trải nghiệm của mình trên blog.

Tất cả bài viết của Pulkit Goyal