Search code examples
ruby-on-railsredisscheduled-tasksresque

What Rails gem should I use to make recurring jobs with Resque?


I have a "Play" button in my app that checks a stock value from an API and creates a Position object that holds that value. This action uses Resque to make a background job using Resque and Redis in the following way:

Controller - stock_controller.rb:

  def start_tracking
    @stock = Stock.find(params[:id])
    Resque.enqueue(StockChecker, @stock.id)
    redirect_to :back
  end

Worker:

class StockChecker
  @queue = :stock_checker_queue

  def self.perform(stock_id)
    stock = Stock.find_by(id: stock_id)
    stock.start_tracking_position
  end

end

Model - stock.rb:

  def start_tracking_position
    // A Position instance that holds the stock value is created
  end

I now want this to happen every 15 minutes for every Stock object. I looked at the scheduling section in the Ruby Toolbox website and have a hard time deciding what fits to my needs and how to start implementing it.

My concern is that my app will create tons of Position objects so I need something that is simple, uses Resque and can withstand this type of object creating without overloading the app.

What gem should I use and what is the simplest way to make my Resque Job happen every 15 minutes when the start_tracking action happens on a Stock object?


Solution

  • I've found resque scheduler to be useful: https://github.com/resque/resque-scheduler.

    Configure up the schedule.yml for 15 mins

    The biggest issue I found was ensuring it's running post releases etc. In the end I set up God to shutdown and restart

    In terms of load. Not sure I follow, the schedulers will trigger events but the load is determined by the number of workers you have and how you decide to implement the creation. You can set the priority of the queues, and workers for the queue, but I guess if you don't process them in a timely way you get a backlog, is that acceptable. ? Normally you would run them of a separate server, this minimising impact to front end