Why does rake behave differently in production

Hello,

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?

Thanks,
Tyler

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
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 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,
Tyler