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?