Search code examples
ruby-on-railsrubysidekiq

How to make Sidekiq workers not to load Rails environment


My Rails app starts a Sidekiq worker that only sends text messages. I am sure it doesn't need whole Rails env to work (it takes only client's phone and text to send as params). But currently the worker loads it and thus grabs a lot of memory from my tiny DigitalOcean droplet (as like separate Rails application).

Is there any way to tell the worker path to the only file it should require?


Solution

  • You can completely decouple your sidekiq worker to be standalone (one or two files) and run that as a separate process on your digital ocean instance. Then in your rails app when you're ready for work to be done you'd just push a job into redis:

    Sidekiq::Client.push({
        'class' => TextMessageWorker,
        'queue' => queue_name,
        'args'  => [number, message]
    })
    

    There are obvious limitations to that (no scheduling AFAIK) but that should meet your needs for this small example.