Uninitialized Constant OBJECT (while in a Rake task)



This post is part of my Stepping Up Rails: Go From Good to Great series. Get the complete series on Teachable!

So you’re inside of a Rake task and you invoke an object in your app. In a classic blunder, your Rails app tells you

Uninitialized Constant: Thingy

What?! “Where’s Thingy!” you proclaim. It can’t be. You check the spelling. You double-check Rails’ object-file name to make sure it’s the same name as the object. (This way, Rails will autoload your file — there’s a post dedicated to that coming up in this series.) In other words, it checks out.

The Rake task: the Rails’ developer’s best friend. A utility knife of utility knives— the Rake task is where you get stuff done. But unfortunately not when it can’t find your Rails objects.

You can do all kinds of things in Rake tasks.

Background jobs are the primary function of Rake tasks.

For instance, queues are run in Rake tasks.

In other words, lots of Rails operates on Rake tasks. They are the underpinning of most SAAS (Software-As-A-Service) back-ends that are written in Ruby on Rails.

Remember you must always specify to the task the symbol :environment . That’s the key, like so:

task my_task: :environment do
# do some stuff here

If you fail to do this, Rails will load your task, but won’t load your environment, so it won’t have access to your models or application objects. You’ll get funny errors, like Uninitialized Constant and the like.

Always remember, load your environment in Rake tasks.