Why does rake behave differently in production


I use RabbitMQ to transfer information from one component to another within my system. I have written a rake task which sets up the RabbitMQ client (the Bunny gem), then sets up a blocking listener so that I can process incoming messages. When I run this rake task, I use the :environment task to load the rails app (the rake task relies on several models and service objects).

When I deployed my system to production, I noticed that my Rabbit task was not working as expected. Digging into the log, I found that the service objects and models were not being loaded by rake. This was strange, since I called :environment. Looking further into it, I’ve been informed that this is the expected behavior, that rake does not preload the rails environment in production.

I’m guessing I’m doing something wrong. Should I not be using rake to set up these listeners? If rake is acceptable, is there a way to test the load path so I see these errors before production? Is :environment only designed to be used in development?



:environment should work everywhere - I’ve been using it in production rake tasks for years. Can you be more specific about how the task was “not working as expected”? If it failed to start, what was the error message? Try running it with --trace to capture the stack trace when it fails.

–Matt Jones

Hi Matt,

I was having issues where I was getting undefined methods on my service objects, as if the service object was not being loaded into memory. I’ve tried to recreate the problem, but I can not. It appears this is non reproducible and I must have had a stale environment or some other weird anomaly.

Thanks for checking in,