How to pass arguments to rake tasks?
We use rake tasks for automating various repetitive tasks. Sometimes, we may need to pass arguments to these tasks to make them more flexible and dynamic.
Here’s how you can pass arguments to Rake task:
Syntax
namespace :my_namespace do
desc "My task description"
task :my_task, [:arg1, :arg2] => :environment do |_, args|
args.with_defaults(arg1: "default1", arg2: "default2")
puts "Argument 1: #{args.arg1}"
puts "Argument 2: #{args.arg2}"
end
end
Example
namespace :data do
desc "Syns data from external source"
task :sync, [:limit] => :environment do |_, args|
args.with_defaults(limit: 100)
DataSyncService.sync(limit: args.limit.to_i)
end
end
In this example, the data:sync
task accepts a :limit
argument.
It sets a default value of limit
to 100
using with_defaults
.
The task then calls a DataSyncService
with limit
as an argument.
To run the task, use the following command:
rake data:sync[50]
NOTE:
If you are a ZSH user you may get the following error:
zsh: no matches found: data:sync[50]
In that case, you can escape the square brackets like this:
rake data:sync\[50\]