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

Rails 8 Ra Mắt: Tính Năng Chính & Tự Do Triển Khai

Rails 8 cuối cùng đã có mặt, và nó đang làm xáo trộn mọi thứ theo một cách khá thú vị. Nếu bạn đã hoạt động trong cộng đồng Rails, bạn có thể đã nghe slogan: "Không Cần PaaS".

Đây là một sứ mệnh bất thường (nhưng không ngạc nhiên) — bản phát hành này tất cả về việc làm cho việc triển khai ứng dụng Rails của bạn dễ dàng hơn mà không cần một platform-as-a-service (PaaS) đầy đủ tính năng.

Platform cung cấp cách cho lập trình viên đưa app của họ lên web mà không cần quản lý cơ sở hạ tầng bên dưới chạy code của họ. Các doanh nghiệp như Heroku, Render, Fly, và Railway đều là lựa chọn phổ biến trong cộng đồng Rails. Lập trình viên thường sẵn sàng đánh đổi một chi phí hosting thêm cho trải nghiệm lập trình viên mà platform cung cấp, nhưng bản phát hành Rails này đang tìm cách làm cho sự đánh đổi đó hấp dẫn kém hơn một chút.

Trong bài viết này, chúng ta sẽ xem xét các tính năng mới và cải tiến đã làm cho điều đó trở nên có thể. Những thứ như Solid Cache, Solid Queue, và Solid Cable là mới trong Rails 8 và loại bỏ một số dependency chúng ta từng cần (như Redis). Kamal 2 bây giờ là mặc định cho triển khai, và có authentication generator mới loại bỏ nhu cầu cho một gem nữa. Hãy đi sâu vào chi tiết.

Rails 8 Thay Đổi Gì?

Rails (và cụ thể là Rails 8) thực sự muốn làm cho việc ship ứng dụng lên production dễ dàng hơn cho bạn mà không cần trả tiền cho platform. Hầu hết các thay đổi trong bản phát hành Rails này xoay quanh sứ mệnh đó — giảm công việc để host ứng dụng Rails bạn mình, không cần PaaS!

Rails 8 Ra Mắt: Tính Năng Chính & Tự Do Triển Khai Hãy nhìn gần hơn vào từng thay đổi chính.

Solid Cache Cho Caching Không Cần Redis

Rails dùng ActiveSupport để cache thứ, điều này quan trọng để làm cho web app performant. Lịch sử mọi người đã dựa vào Redis cho caching vì nó nhanh và tin cậy.

Solid Cache được phát hành một thời gian trước như một cache store không cần Redis cho ActiveSupport. Nó đã được dùng tại 37signals và nhiều nơi hơn một thời gian, và Rails bây giờ đang thúc đẩy nó như lựa chọn mặc định. Bởi vì nó dùng database (SQLite mặc định) cho cache store thay vì RAM, bạn có thêm lợi thế là có thể cache nhiều hơn nhiều so với thông thường. Không gian database rẻ hơn RAM, nên dù dùng database để back hệ thống caching chậm hơn dùng RAM, nhưng khả năng cache nhiều thứ hơn cho thời gian dài có thể làm cho một số app thậm chí còn performant hơn.

Sự đánh đổi hiệu suất này tuyệt vời cho một số use case nhưng có thể không lý tưởng cho những cái khác, vì vậy vẫn dễ dàng dùng một trong các cache store khác. Việc loại bỏ nhu cầu Redis hoặc Memcached mặc định đưa bạn gần hơn một bước với sứ mệnh "Không Cần PaaS" mà Rails đang theo đuổi.

Solid Queue Cho Background Job Không Cần Redis

Bạn có thể đã biết Rails dùng thư viện ActiveJob để làm cho việc viết và chạy background job dễ dàng hơn. Giống như caching, Rails cho bạn chọn backend powering ActiveJob. Nhiều người yêu thích Sidekiq hoặc Good Job, nhưng hầu hết các tùy chọn ngày nay có hai vấn đề:

  • Chúng là dependency khác để import, quản lý, và có thể trả tiền cho
  • Chúng dựa vào dịch vụ khác như Redis (bạn phải host, quản lý, và có thể trả tiền cho)

Solid Queue tìm cách giải quyết cả hai bằng cách quản lý background job mà không dựa vào Redis. Nếu bạn đã dùng Sidekiq hoặc provider hàng đợi khác phụ thuộc Redis, Solid Queue là một lựa chọn thay thế giảm độ phức tạp và làm cho hosting dễ dàng hơn. Giống như Solid Cache, Solid Queue dùng database của ứng dụng thay vì RAM để theo dõi background job. Đây là một tính năng nữa mà Rails cung cấp mặc định để giảm dependency và làm cho triển khai production đơn giản hơn.

Solid Cable Cho WebSocket Không Cần Redis

Rails dùng Action Cable để làm cho việc dùng WebSocket cho tính năng real-time dễ dàng cho lập trình viên. Lịch sử, điều này yêu cầu Redis. Bạn có thể đoán được hướng đi!

Giữ theme 'Solid', Rails 8 ship với một adapter database-backed mặc định khác. Bạn không cần dùng nó, nhưng nếu bạn muốn dùng WebSocket và muốn tránh phải cấu hình và maintain Redis, đây là một lựa chọn first-party tuyệt vời. Cùng với Solid Cache và Solid Queue, Solid Cable làm cho việc ship ứng dụng Rails không cần PaaS dễ dàng hơn nữa bằng cách loại bỏ nhu cầu Redis và dựa vào database.

Kamal 2 Cho Triển Khai Dễ Dàng Hơn

Tính năng mới tiếp theo trong Rails 8 khá khác biệt so với các adapter Solid. Vẫn thì, Kamal (và cụ thể Kamal 2) làm cho việc ship ứng dụng với hardware của bạn đơn giản hơn. Bởi vì Docker đã làm cho việc modularize phần mềm dễ dàng, việc có một phần mềm để ship Docker container, bất kể ngôn ngữ, hoàn toàn hợp lý.

Theo ý kiến của tôi, Kamal, ngay cả khi kết hợp với phần còn lại của Rails 8, không thể thực sự chạm đến trải nghiệm lập trình viên của hầu hết platform. Vẫn thì, nó làm cho việc ship phần mềm đến web server của bạn cách dễ dàng hơn nhiều, ngay cả khi bạn không dùng Rails! Nó có thể không phải là sự thay thế hoàn toàn cho PaaS, nhưng một khi bạn đã hoàn thành setup ban đầu, chạy kamal deploy là một cải tiến lớn so với tự triển khai.

Authentication Generator (Không Cần Devise!)

Nếu bạn đang làm ứng dụng Rails có users, bạn có thể sẽ cần authentication. Cho đến nay, Rails chưa bao gồm authentication như một phần của framework. Cộng đồng có một số giải pháp tuyệt vời giúp lập trình viên Rails viết authentication, phổ biến nhất là Devise.

Rails 8 ship với authentication generator. Đây không phải là một hệ thống authentication đầy đủ, nhưng nó đủ để giúp bạn làm đúng các phần quan trọng (như bảo mật). Việc viết view để xử lý login và user sign-up flow là trách nhiệm của lập trình viên, nhưng generator sẽ xử lý session, xác thực mật khẩu, và thậm chí email mật khẩu. DHH đã nói một chút về việc lựa chọn loại bỏ view trong authenticator là một lựa chọn cố ý nhằm ngăn ứng dụng Rails trông giống nhau.

Việc thêm các generator mới này không trực tiếp đơn giản hóa việc ship ứng dụng, nhưng nó cung cấp giải pháp first-party cho một vấn đề phổ biến trong xây dựng ứng dụng web mà Rails đã thiếu trong quá lâu.

Propshaft Cho Asset Pipeline

Một trong những thay đổi lớn nhất (bên dưới mặt nạ) trong Rails 8 là chuyển từ Sprockets sang Propshaft cho asset pipeline mặc định. Rails vẫn hỗ trợ Sprockets nếu bạn muốn hoặc cần dùng nó, nhưng ứng dụng Rails 8 mới mặc định dùng Propshaft.

Propshaft rất có quan điểm về việc không bundle hoặc minify asset. Cũng như Rails đang tìm cách làm cho PaaS không cần thiết, nó cũng đang cố gắng làm cho các build pipeline phức tạp không cần thiết. Giống như nhiều mặc định mới khác trong Rails 8, bạn có thể dùng Propshaft với phiên bản Rails cũ hơn và vẫn dùng Sprockets cho Rails 8!

SQLite Và Rails

Mặc dù SQLite không chính xác là một phần của Rails, Rails đang dựa vào SQLite nhiều hơn với bản phát hành này. SQLite là một database engine không cần server, làm cho nó đơn giản hơn Postgres. Nếu ứng dụng Rails của bạn dùng SQLite, bạn sẽ không cần quy trình database riêng biệt chạy tách biệt từ quy trình web. Tất nhiên, điều này rất phù hợp với sứ mệnh của Rails 8, làm cho việc ship ứng dụng web đơn giản hơn.

Rails 8 ship với hỗ trợ first-party cho SQLite, đảm bảo nó đủ mạnh để xử lý nhu cầu database truyền thống của bạn và hỗ trợ các adapter Solid database-backed mới.

Mọi Thứ Mới Trong Rails 8 Đều Về Làm Cho Platform Ít Cần Thiết Hơn

Nếu bạn đang nâng cấp ứng dụng Rails hiện có lên Rails 8, không có nhiều việc bạn phải làm để hoàn tất nâng cấp. Chỉ có một vài thứ bị xóa, chủ yếu trong Active Record, mà đã có deprecation notice một thời gian. Bạn có thể, tất nhiên, tận dụng tất cả các mặc định "mới trong Rails 8" để đơn giản hóa triển khai ứng dụng của bạn, nhưng nó là tùy chọn.

Những thay đổi lớn nhất trong Rails 8 là cho ứng dụng Rails mới! Ứng dụng Rails mới sẽ mặc định dùng Solid Queue cho background job, Solid Cache cho caching, Solid Cable cho WebSocket, Propshaft cho asset pipeline, và Kamal 2 cho triển khai.

Rails gần đây đang trong sứ mệnh nén độ phức tạp và cung cấp framework đầy đủ tính năng để làm ứng dụng web hiện đại. Rails 8 đi xa hơn làm ứng dụng web và vào ship ứng dụng web trong khi vẫn tương thích với các tùy chọn hiện có.

Bạn có thể dùng tất cả, một phần, hoặc không dùng mặc định Rails 8 nào và vẫn dùng platform nếu bạn thích trải nghiệm lập trình viên đó. Nhưng bản phát hành này nhằm mục đích cho bạn tùy chọn để bỏ qua platform và nắm quyền sở hữu nhiều hơn đối với cơ sở hạ tầng của bạn.

Nếu bạn thích bài viết này, hãy đăng ký bản tin Honeybadger để nhận thêm tin tức và tutorial Ruby và Rails ngay trong hộp thư của bạn!