- vừa được xem lúc

Phân biệt giữa gem Whenever và Active Job trong Rails

0 0 25

Người đăng: Phuc Dang Xuan

Theo Viblo Asia

Lời mở đầu

Trong việc phát triển ứng dụng web bằng Rails, việc lập lịch các tác vụ (scheduling tasks) và xử lý các công việc bất đồng bộ (asynchronous jobs) là hai yếu tố quan trọng. Rails cung cấp hai giải pháp phổ biến để thực hiện hai chức năng này: gem wheneveractive job. Trên thực tế, hai thư viện này có mục đích và phạm vi sử dụng khác nhau. Trong bài viết này, chúng ta sẽ tìm hiểu sự khác biệt giữa gem Whenever và Active Job trong Rails.

1. Whenever

Whenever là một gem cho phép bạn định nghĩa và lập lịch các tác vụ cron job trên máy chủ. Điểm mạnh của Whenever là nó sử dụng cú pháp Ruby đơn giản để định nghĩa các công việc và lập lịch chúng. Điều này giúp bạn dễ dàng hiểu và quản lý lịch trình của các công việc.

Để sử dụng Whenever, bạn cần thêm gem này vào Gemfile của ứng dụng Rails của mình. Sau đó, bạn có thể tạo một tệp cấu hình Whenever để định nghĩa các công việc và lịch trình cho chúng. Các công việc có thể được chạy theo các chu kỳ thời gian cố định hoặc theo lịch trình tùy chỉnh.

Tuy nhiên, cần lưu ý rằng Whenever chỉ làm việc với các công việc cron bên ngoài ứng dụng Rails của bạn. Điều này có nghĩa là công việc sẽ chạy trong một môi trường riêng biệt và không có truy cập vào các phần của ứng dụng Rails như models, controllers, hoặc views.

Whenever sử dụng file schedule.rb để định nghĩa các tác vụ được lên lịch. Ví dụ, bạn có thể sử dụng gem whenever để lên lịch gửi email hàng ngày vào lúc 8 giờ sáng:

every 1.day, at: '8:00 am' do runner 'UserMailer.daily_summary.deliver_now'
end

Hay lên lịch chạy một tác vụ sau mỗi giờ:

every 1.hour do rake 'data:process'
end

Khi file schedule.rb được cập nhật, bạn cần chạy lệnh whenever --update-crontab để cập nhật lịch cho hệ thống.

Một số điểm nổi bật:

Cú pháp đơn giản: whenever cung cấp một cú pháp đơn giản và dễ hiểu để lên lịch chạy các tác vụ.

Dễ dàng cấu hình: whenever cho phép bạn cấu hình các tác vụ định kỳ theo ý muốn. Bạn có thể định lịch chúng hàng giờ, hàng ngày, hàng tuần hoặc theo bất kỳ lịch trình nào khác mà bạn muốn.

Quản lý tập trung: Với whenever, bạn có thể quản lý tất cả các tác vụ định kỳ trong một vị trí duy nhất. Điều này giúp giảm thiểu sự phân tán và tăng khả năng bảo trì của hệ thống.

2. Active Job

Active Job là một phần của Rails cho phép thực hiện các tác vụ bất đồng bộ, nó giúp trừu tượng hóa việc thực hiện các công việc và cho phép bạn sử dụng các backend khác nhau như Delayed Job, Resque, hay Sidekiq.

Với Active Job, bạn có thể tạo ra các công việc và gửi chúng vào hàng đợi để được thực thi. Các công việc này có thể chạy ngay lập tức hoặc theo lịch trình mà bạn xác định. Một ưu điểm lớn của Active Job là nó có thể sử dụng các thành phần khác trong ứng dụng Rails như models, services, và helpers, giúp bạn dễ dàng xử lý các tác vụ.

Để thực hiện một tác vụ bất đồng bộ, bạn chỉ cần tạo một lớp kế thừa từ lớp ApplicationJob và định nghĩa phương thức perform. Ví dụ:

class MyJob < ApplicationJob queue_as :default def perform(*args) # Do something later end
end

Sau đó, bạn có thể khởi tạo đối tượng MyJob và gửi nó đến hàng đợi để chạy bất đồng bộ:

MyJob.perform_later(arg1, arg2)

Một số điểm nổi bật:

Đa ngôn ngữ và đa nguồn gốc: Bạn có thể sử dụng active job với bất kỳ công nghệ xử lý nào mà Rails hỗ trợ, chẳng hạn như Sidekiq, Delayed Job hoặc Resque.

Quản lý tác vụ bất đồng bộ: Bạn có thể tạo và lên lịch các công việc bất đồng bộ một cách linh hoạt, cho phép xử lý các tác vụ mà không làm tắc nghẽn luồng chính.

Tích hợp với hàng đợi: Active Job tích hợp tốt với các hệ thống hàng đợi, cho phép bạn chuyển các tác vụ vào hàng đợi để xử lý sau này. Điều này giúp giảm thời gian phản hồi của ứng dụng và tăng khả năng mở rộng.

Đa kênh thông báo: Active Job cung cấp tính năng thông báo đa kênh, cho phép bạn gửi thông báo đến nhiều nguồn đích khác nhau từ các tác vụ bất đồng bộ. Bạn có thể gửi email, tin nhắn, thông báo push hoặc các phương tiện truyền thông khác thông qua active job.

Quản lý lỗi và tái thực thi: Active Job hỗ trợ quản lý lỗi và tái thực thi các tác vụ bất đồng bộ. Nếu một công việc thất bại, bạn có thể xử lý lỗi theo cách phù hợp, ví dụ như gửi email thông báo lỗi hoặc tái thực thi công việc một số lần.

Tổng kết

Tóm lại, gem wheneveractive job đều là các công cụ hỗ trợ quan trọng trong Rails để xử lý các tác vụ định kỳ và bất đồng bộ.

Gem whenever giúp lên lịch lịch và quản lý các tác vụ định kỳ trong ứng dụng. Nó cung cấp cú pháp đơn giản và tích hợp với cron job, cho phép bạn quản lý các tác vụ theo lịch trình cụ thể. Whenever giúp tăng tính linh hoạt và giảm sự phân tán trong việc quản lý các tác vụ định kỳ.

Còn active job giúp xử lý các tác vụ bất đồng bộ trong Rails. Nó đơn giản hóa việc tạo và quản lý các công việc bất đồng bộ trong ứng dụng. Active job tích hợp tốt với hàng đợi và cung cấp khả năng quản lý tác vụ, đa kênh thông báo, quản lý lỗi và tái thực thi.

Tùy thuộc vào yêu cầu của dự án, bạn có thể lựa chọn sử dụng gem whenever khi cần lên lịch cho các tác vụ định kỳ theo thời gian cụ thể. Trong khi đó, active job là sự lựa chọn tốt khi xử lý các tác vụ bất đồng bộ và tương tác với hàng đợi. Việc dùng chung hai thư viện này sẽ giúp bạn xây dựng ứng dụng Rails mạnh mẽ và linh hoạt, có khả năng xử lý cả tác vụ định kỳ và tác vụ bất đồng bộ một cách hiệu quả.

Trên đây là sự khác biệt giữa gem wheneverActive Job được mình tổng hợp từ nhiều nguồn khác nhau. Cảm ơn các bạn đã theo dõi!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tôi cá là bạn không biết những điều này - Ruby on rails ( Phần 2)

Các bạn có thể theo dõi phần 1 ở đây :. https://viblo.asia/p/toi-ca-la-ban-khong-biet-nhung-dieu-nay-ruby-on-rails-phan-1-WAyK8DDeKxX. 5.

0 0 222

- vừa được xem lúc

Rails Memoization

Memoization is a process that can be used to speed up rails methods. It caches the results of methods that do time-consuming work, work that only needs to be done once. Here is an example. Example.

0 0 48

- vừa được xem lúc

Tại sao Rails lại dùng cả Webpack lẫn Sprocket?

Khi Rails 6 được ra mắt, có thể bạn đã từng tự hỏi. WTF, sao Webpack đã được add vào rồi, mà Sprocket vẫn tồn tại thế kia . Chẳng phải Webpack và Sprocket được dùng để giải quyết chung một công việc hay sao. Hoặc cả đây:.

0 0 59

- vừa được xem lúc

Bạn nên sử dụng Elasticsearch trong ứng dụng Ruby On Rails như thế nào?

Elasticsearch là một công cụ phân tích và mã nguồn mở mạnh mẽ và linh hoạt, phân tán, theo thời gian thực. Đó là tiêu chuẩn vàng trong công nghệ tìm kiếm.

0 0 80

- vừa được xem lúc

Form object pattern trong rails

1.Mở đầu.

0 0 111

- vừa được xem lúc

Sử dụng Twilio để gửi SMS trong ứng dụng Ruby on Rails

Ngoài cách xác nhận tài khoản hay gửi thông báo bằng email thì hôm nay mình sẽ hướng dẫn các bạn 1 cách nữa là thông qua SMS/Voice. Công cụ sử dụng sẽ là gem Twilio. Installation. Để cài đặt bằng Bundler, hãy lấy phiên bản mới nhất:.

0 0 67