With any web application, you will find yourself needing to run ‘behind-the-scenes’ tasks. In the .NET world, I often found myself writing scheduled tasks to run on app servers, or utilizing Taskie to accomplish these goals. But with Ruby on Rails, you’ll find yourself writing Rake tasks.
Rails contains a Rakefile in its root directory. By default, if you run the following command in the terminal while in your Rails root directory, you’ll run the specified rake task:
But where do these tasks live? The answer is the lib/tasks directory in your rails application. Within this folder, you can add any number or rake task files with the prefix of .rake. Within these files, you can add a task like so:
desc "A really basic rake task" task :do_basic_stuff do puts "I just did some really cool but basic stuff!" end
In the terminal, if you were to run rake do_basic_stuff, you’d see the output described by the above task.
If you want to access your rails environments (object, models, ect…), you’ll need to add the :environment attribute to your task. In the above example, your task would begin with:
task :do_basic_stuff => :environment do ...
There are a lot of other cool features you can utilize with your rake tasks, but rather than go over them here, I’d highly recommend you watch the railscast on the subject. Afterwards, you should be writing rake tasks like a boss!