My favorites | Sign in
Project Logo
                
Code license: MIT License
Labels: ruby, rails, asynchronous
People details
Project owners:
  nate.kontny

Aynchronous

Now you can make any method in one of your models asynchronous. For example,

class TestRecord < ActiveRecord::Base

after_save :an_alert
def an_alert
logger.info 'We could now asynchronously send an email to tons of people with this alert.'
end asynchronous :an_alert
end

That's it, just install the plugin, add a 'QueuedMethods' table (follow my migration script), and add the 'asynchronous :symbol' part below where you declare the method you are making asynchronous. I've included a migration script in the db folder to use for the QueuedMethods table.

To process your queue just set up a cron job using the script runner:

'script/runner 'MethodQueue.process' -e production'

This is still in its first draft, but working under the conditions shown in the tests. Please feel free though to hack at it an make it better. I think it's a pretty useful tool. But a couple things I don't like:

1) What's the standard way these days to create a table a plugin depends on? Probably not in the install.rb in case there is a name conflict?

2) The 'asynchronous' part has to be declared below the method declaration. Is there anyway to make it agnostic of the method declaration location?

Testing

If you want to test, you need to have a test table for the test model setup in the database. I included a mysql.sql file to create that table in the test/fixtures dir. Then you can just run 'rake', in your RAILS_PROJ/vendor/plugins/asynchronous.

Major Thanks

Chris Eppstein provided a great patch that got rid of race condition the original plugin had. This makes it truly useful for most jobs people need something like this for. Thanks man!

-Nate http://www.inklingmarkets.com









Hosted by Google Code