Why does rake behave differently in production


I use RabbitMQ to transfer information from one component to another
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
to load the rails app (the rake task relies on several models and

When I deployed my system to production, I noticed that my Rabbit task
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
is the expected behavior, that rake does not preload the rails
in production.

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


On Friday, 7 August 2015 15:38:17 UTC-5, Tyler DeWitt wrote:

When I deployed my system to production, I noticed that my Rabbit task was

:environment should work everywhere - I’ve been using it in production
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 J.

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,