No commit activity in last 3 years
No release in over 3 years
Moves method asynchronously in a simple and not degraded manner. Resque plugin resque-lock-timeout allows one to avoid more work concurentiel. Simple to set up and implement this plug in is pretty amazing.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0

Runtime

 Project Readme

Resque::Plugins::Async::Method

Make Active Record instance methods asynchronous using resque.

Works with Ruby ~> 1.9, Rails ~> 3 and Resque ~> 1.17. (Probably works with earlier versions too -- but why?)

Usage

class User < ActiveRecord::Base
  # Not needed! This is done using a hook on ActiveRecord::Base.
  # include Resque::Plugins::Async::Method

  def process_avatar
    # do stuff
  end
  async_method :process_avatar

end

u = User.find(1)

u.process_avatar # => queued in 'users' queue

# You can call previous method in sync mode by :
u.sync_process_avatar # => happens right away!

Note that in the test environment, none of this magic happens. You can test the expected output immediately.

Method return values will change. Resque.enqueue will return [] from an async'ed method.

In Module extension

Sometimes it's nice to async a method that you're including from a module:

module MyExtension
  extend ActiveSupport::Concern

  include Resque::Plugins::Async::Method

  included do
    async_method :generate_matrix, queue: 'matrices'
  end

  def generate_matrix
    # do stuff
  end
end

Concurrently protection

You can protect for concurrently processing in background

For this, you must indicate which classes should not make any treatment concurrently :

class User < ActiveRecord::Base
	...

   def process_avatar
    # do stuff
  end
  async_method :process_avatar, loner: true

end

You can also set a timeout in seconds, when you pass key :lock_timeout the key :loner is useless but you can set it anyway.

class User < ActiveRecord::Base
	...

   def process_avatar
    # do stuff
  end
  async_method :process_avatar, lock_timeout: 3600

end

Changelog

  • 1.3: Technical enhancement, switch to plugin resque-lock-timeout
  • 1.2: Add flaging system
  • 1.1.1: Switch to Rspec test suite.
  • 1.0.1: Update for latest Resque API (true returned from successful queue)
  • 1.0.0: Initial release