Gem Whenever trong Rails

Trong bài viết này, mình muốn giới thiệu với mọi người về gem Whenever trong Rails. Gem Whenever là một công cụ đắc lực để tạo Cron Jobs trong các dự án Rails. I, Cron Jobs là gì Cron Jobs là một chức năng dùng để thực thi các câu lệnh vào một thời điểm

Trong bài viết này, mình muốn giới thiệu với mọi người về gem Whenever trong Rails. Gem Whenever là một công cụ đắc lực để tạo Cron Jobs trong các dự án Rails.

I, Cron Jobs là gì

Cron Jobs là một chức năng dùng để thực thi các câu lệnh vào một thời điểm nhất đinh.
Ví dụ: Bạn muốn định kỳ hàng tuần gửi email cho người dùng bạn có thể sự dung cronjob để tự động hóa việc này thay vì phải làm bằng tay.

II, Gem Whenever

Gem whenever là 1 gem giúp ta set up cron jobs thay vì phải tự mình chỉnh sửa crontab(file chứa các cronjobs). Bạn có thể để whenever cập nhật crontab của bạn bằng các câu lệnh ruby.

1, Cài đặt

Như thường lệ khi cài đặt một gem trong Rails chúng ta sẽ thêm gem đó vàoGemfilevà chạy lệnh bundle install:

gem "whenever"

Sau đó chạy lệnh:

bundle exec wheneverize

Lệnh này sẽ tạo file config/schedule.rb. Bạn sẽ viết các cronjobs trong file này.

2, Sử dụng

Lệnh whenever lệnh này đơn giản hiển thị cho bạn file schedule.rb sau khi chuyển thành cron syntax. Lệnh này sẽ không đọc hay ghi file crontab

Để viết vào file crontab công việc mình muốn làm thì thực thi lệnh:

whenever --update -crontab

Ngoài ra nếu bạn muốn xem các lệnh cronjobs đang chạy bạn có thể sử dụng câu lệnh:
crontab -l

Ví dụ file schedule.rb

every 3.hours do #Thực hiện công việc mỗi 3 tiếng
  runner "MyModel.some_process"
  rake "my:rake:task"
  command "/usr/bin/my_great_command"
end

every 1.day, at: '4:30 am' do #Thực hiện công việc mỗi này vào lúc 4:30am
  runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end

every 1.day, at: ['4:30 am', '6:00 pm'] do #Thực hiện công việc mỗi ngày vào lúc 4:30am và 6:00pm
  runner "Mymodel.task_to_run_in_two_times_every_day"
end

every :hour do #Viết tắt cho 1.hour ngoài ra còn có :day, :month, :year
  runner "SomeModel.ladeeda"
end

every :sunday, at: '12pm' do #Thực hiện công việc vào chủ nhật lúc 12pm
  runner "Task.do_something_great"
end

every '0 0 27-31 * *' do #Viết theo lệnh cron 
  command "echo 'you can use raw cron syntax too'"
end

Khi viết theo kiểu lệnh cron các bạn cần chú ý cron sẽ sử dung “* * * * * *” để xác định thời điểm thực hiện lệnh theo quy tắc:

* * * * * *
| | | | | |
| | | | | +-- Năm              (range: 1900-3000)
| | | | +---- Thứ trong tuần   (range: 1-7, 1 standing for Monday)
| | | +------ Tháng            (range: 1-12)
| | +-------- Ngày trong tháng (range: 1-31)
| +---------- Giờ              (range: 0-23)
+------------ Phút             (range: 0-59)

Whenever có các loại job được xác định trước:

job_type :command, ":task :output"
job_type :rake,    "cd :path && :environment_variable=:environment bundle exec rake :task --silent :output"
job_type :runner,  "cd :path && bin/rails runner -e :environment ':task' :output"
job_type :script,  "cd :path && :environment_variable=:environment bundle exec script/:task :output"

Ngoài ra bạn có thể tự định nghĩa các job_type của riêng mình và cũng có thể ghi đè các job_type mặc định.

Bạn cũng có thể set các giá trị mặc định trong câu lệnh job_type
Ví dụ:set :output, "log/cron_job.log" #set file output là "log/cron_job.log"

Trên đây là những gì mình muốn giới thiệu về gem Whenever. Cảm ơn các bạn đã xem bài viết của mình

Tài liệu tham khảo:

https://github.com/javan/whenever

Nguồn: viblo.asia

Bài viết liên quan

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con

Khi nào nên dùng main, section, article, header, footer, và aside trong HTML5

HTML5 đã giới thiệu các thẻ ngữ nghĩa giúp cấu trúc nội dung web một cách có

So sánh Webhook và API: Khi nào nên sử dụng?

Trong lĩnh vực công nghệ thông tin và phát triển phần mềm, Webhook và API là hai th