0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Scheduling tasks using the Whenever Gem — Ruby On Rails

Last updated at Posted at 2022-11-01

Introduction About the Cron Job

Hi Everyone! In this post, I want to share with you a little guide that will show you how to use cron jobs in a Ruby on Rails application.
2.png

What’s a Cron Job?

A cron job is a process that is scheduled to run at a certain time (every minute, day, week, or month). On Unix systems, we can run and manage these types of processes using the cron tool. The info on the process that will run the cron tool is stored in a file called crontab.

Examples of the use of cron jobs are the following:

  • Generate reports. e.g, a report of daily payments from an e-commerce application.

  • Send reminders to users. e.g, sending offer reminders from an e-commerce application.

Step 1:Install whenever gem

Gem Info : https://github.com/javan/whenever](https://github.com/javan/whenever

# Cronjobs
gem 'whenever', require: false

Step 2: Initialize whenever the gem

cd /my-great-project
bundle exec wheneverize .

add log file path in the schedule.rb

# schedule.rb
set :output, {:error => “log/cron_error_log.log”, :standard => “log/cron_log.log”}

Step 3: Create a rake task

touch lib/tasks/first_sample_task.rake

On our task, we will simply print a message.

# lib/tasks/first_sample_task.rake
desc 'First Whenever rake task'
task first_sample_task: :environment do
  Rails.logger.info "First Sample Task"
end

To see the rake tasks of our Rails application, we can use the following command.

# See all tasks
bundle exec rake --tasks

Step 4: Add in the schedule file

The structure of a cron job is the following

.--------------- minute (0-59) 
|  .------------ hour (0-23)
|  |  .--------- day of month (1-31)
|  |  |  .------ month (1-12)
|  |  |  |  .--- day of week (0-6) (sunday=0 or 7)  
|  |  |  |  |
*  *  *  *  *  command to execute

An example of how to define a cron job to execute every 15minutes

# schedule.rb
every '*/15 * * * *' do
  rake 'first_sample_task'
end

For Reference
https://crontab.guru/#/15_*_

Step 5:Update crontab

whenever --update-crontab

# crontab file 
*/15 * * * * /bin/bash -l -c 'cd OUR_PROJECT_PATH && RAILS_ENV=production bundle exec rake first_sample_task - silent >> log/cron_log.log 2>> log/cron_error_log.log'

If we see at our logs, we can see the following.

# log/cron_log.log
I, [2022-05-04T18:05:02.890007 #98613]  INFO -- : First Sample Task
I, [2022-05-04T18:20:02.944687 #98649]  INFO -- : First Sample Task

Step 6: Crontab important commands

# get crontab list
crontab -l

# delete all crontab
crontab -r

# edit crontab
crontab -e

Step 7:For deployment

need to import whenever file in capfile and deploy.rb

# capfile
require 'whenever/capistrano'

# deploy.rb
require 'whenever'
require 'whenever/capistrano'

If this guide has been helpful to you and your team please share it with others!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?