resque-mongo 1.8.1 → 1.9.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- *.gemspec
2
- pkg
3
- nbproject
data/.kick DELETED
@@ -1,26 +0,0 @@
1
- # take control of the growl notifications
2
- module GrowlHacks
3
- def growl(type, subject, body, *args, &block)
4
- case type
5
- when Kicker::GROWL_NOTIFICATIONS[:succeeded]
6
- puts subject = "Success"
7
- body = body.split("\n").last
8
- when Kicker::GROWL_NOTIFICATIONS[:failed]
9
- subject = "Failure"
10
- puts body
11
- body = body.split("\n").last
12
- else
13
- return nil
14
- end
15
- super(type, subject, body, *args, &block)
16
- end
17
- end
18
-
19
- Kicker.send :extend, GrowlHacks
20
-
21
- # no logging
22
- Kicker::Utils.module_eval do
23
- def log(message)
24
- nil
25
- end
26
- end
@@ -1,32 +0,0 @@
1
- * Chris Wanstrath
2
- * gravis
3
- * scotttam
4
- * John Barnette
5
- * Mike Mangino
6
- * Rob Hanlon
7
- * Jason Amster
8
- * Aaron Quint
9
- * Adam Cooke
10
- * Ashley Martens
11
- * Matt Duncan
12
- * Michael Dwan
13
- * Daniel Ceballos
14
- * Roman Heinrich
15
- * Thibaut Barrère
16
- * jgeiger
17
- * Simon Rozet
18
- * Dave Hoover
19
- * Christos Trochalakis
20
- * Ben VandenBos
21
- * snusnu
22
- * Arthur Zapparoli
23
- * Ben Marini
24
- * Brian P O'Rourke
25
- * Jim Remsik and Les Hill
26
- * Karel Minarik
27
- * Luc Castera
28
- * Masatomo Nakano
29
- * Matt Palmer
30
- * PJ Hyett
31
- * Roland Moriz
32
- * malomalo
data/config.ru DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'logger'
3
-
4
- $LOAD_PATH.unshift ::File.expand_path(::File.dirname(__FILE__) + '/lib')
5
- require 'resque/server'
6
-
7
- # Set the RESQUECONFIG env variable if you've a `resque.rb` or similar
8
- # config file you want loaded on boot.
9
- if ENV['RESQUECONFIG'] && ::File.exists?(::File.expand_path(ENV['RESQUECONFIG']))
10
- load ::File.expand_path(ENV['RESQUECONFIG'])
11
- end
12
-
13
- use Rack::ShowExceptions
14
- run Resque::Server.new
data/deps.rip DELETED
@@ -1,8 +0,0 @@
1
- mongo
2
- bson_ext
3
- git://github.com/brianmario/yajl-ruby.git 0.6.3
4
- git://github.com/sinatra/sinatra.git 0.9.4
5
- git://github.com/rack/rack.git 1.0
6
- git://github.com/quirkey/vegas.git v0.1.2
7
- git://github.com/brynary/rack-test.git v0.5.3
8
- rake
@@ -1,121 +0,0 @@
1
- Resque Hooks
2
- ============
3
-
4
- You can customize Resque or write plugins using its hook API. In many
5
- cases you can use a hook rather than mess with Resque's internals.
6
-
7
- For a list of available plugins see
8
- <http://wiki.github.com/defunkt/resque/plugins>.
9
-
10
-
11
- Worker Hooks
12
- ------------
13
-
14
- If you wish to have a Proc called before the worker forks for the
15
- first time, you can add it in the initializer like so:
16
-
17
- Resque.before_first_fork do
18
- puts "Call me once before the worker forks the first time"
19
- end
20
-
21
- You can also run a hook before _every_ fork:
22
-
23
- Resque.before_fork do |job|
24
- puts "Call me before the worker forks"
25
- end
26
-
27
- The `before_fork` hook will be run in the **parent** process. So, be
28
- careful - any changes you make will be permanent for the lifespan of
29
- the worker.
30
-
31
- And after forking:
32
-
33
- Resque.after_fork do |job|
34
- puts "Call me after the worker forks"
35
- end
36
-
37
- The `after_fork` hook will be run in the child process and is passed
38
- the current job. Any changes you make, therefor, will only live as
39
- long as the job currently being processes.
40
-
41
- All worker hooks can also be set using a setter, e.g.
42
-
43
- Resque.after_fork = proc { puts "called" }
44
-
45
-
46
- Job Hooks
47
- ---------
48
-
49
- Plugins can utilize job hooks to provide additional behavior. A job
50
- hook is a method name in the following format:
51
-
52
- HOOKNAME_IDENTIFIER
53
-
54
- For example, a `before_perform` hook which adds locking may be defined
55
- like this:
56
-
57
- def before_perform_with_lock(*args)
58
- set_lock!
59
- end
60
-
61
- Once this hook is made available to your job (either by way of
62
- inheritence or `extend`), it will be run before the job's `perform`
63
- method is called. Hooks of each type are executed in alphabetical order,
64
- so `before_perform_a` will always be executed before `before_perform_b`.
65
- An unnamed hook (`before_perform`) will be executed first.
66
-
67
- The available hooks are:
68
-
69
- * `before_perform`: Called with the job args before perform. If it raises
70
- `Resque::Job::DontPerform`, the job is aborted. If other exceptions
71
- are raised, they will be propagated up the the `Resque::Failure`
72
- backend.
73
-
74
- * `after_perform`: Called with the job args after it performs. Uncaught
75
- exceptions will propagate up to the `Resque::Failure` backend.
76
-
77
- * `around_perform`: Called with the job args. It is expected to yield in order
78
- to perform the job (but is not required to do so). It may handle exceptions
79
- thrown by `perform`, but any that are not caught will propagate up to the
80
- `Resque::Failure` backend.
81
-
82
- * `on_failure`: Called with the exception and job args if any exception occurs
83
- while performing the job (or hooks).
84
-
85
- Hooks are easily implemented with superclasses or modules. A superclass could
86
- look something like this.
87
-
88
- class LoggedJob
89
- def self.before_perform_log_job(*args)
90
- Logger.info "About to perform #{self} with #{args.inspect}"
91
- end
92
- end
93
-
94
- class MyJob < LoggedJob
95
- def self.perform(*args)
96
- ...
97
- end
98
- end
99
-
100
- Modules are even better because jobs can use many of them.
101
-
102
- module LoggedJob
103
- def before_perform_log_job(*args)
104
- Logger.info "About to perform #{self} with #{args.inspect}"
105
- end
106
- end
107
-
108
- module RetriedJob
109
- def on_failure_retry(e, *args)
110
- Logger.info "Performing #{self} caused an exception (#{e}). Retrying..."
111
- Resque.enqueue self, *args
112
- end
113
- end
114
-
115
- class MyJob
116
- extend LoggedJob
117
- extend RetriedJob
118
- def self.perform(*args)
119
- ...
120
- end
121
- end
@@ -1,93 +0,0 @@
1
- Resque Plugins
2
- ==============
3
-
4
- Resque encourages plugin development. For a list of available plugins,
5
- please see <http://wiki.github.com/defunkt/resque/plugins>.
6
-
7
- The `docs/HOOKS.md` file included with Resque documents the available
8
- hooks you can use to add or change Resque functionality. This document
9
- describes best practice for plugins themselves.
10
-
11
-
12
- Version
13
- -------
14
-
15
- Plugins should declare the major.minor version of Resque they are
16
- known to work with explicitly in their README.
17
-
18
- For example, if your plugin depends on features in Resque 2.1, please
19
- list "Depends on Resque 2.1" very prominently near the beginning of
20
- your README.
21
-
22
- Because Resque uses [Semantic Versioning][sv], you can safely make the
23
- following assumptions:
24
-
25
- * Your plugin will work with 2.2, 2.3, etc - no methods will be
26
- removed or changed, only added.
27
- * Your plugin might not work with 3.0+, as APIs may change or be
28
- removed.
29
-
30
-
31
- Namespace
32
- ---------
33
-
34
- All plugins should live under the `Resque::Plugins` module to avoid
35
- clashing with first class Resque constants or other Ruby libraries.
36
-
37
- Good:
38
-
39
- * Resque::Plugins::Lock
40
- * Resque::Plugins::FastRetry
41
-
42
- Bad:
43
-
44
- * Resque::Lock
45
- * ResqueQueue
46
-
47
-
48
- Gem Name
49
- --------
50
-
51
- Gem names should be in the format of `resque-FEATURE`, where `FEATURE`
52
- succinctly describes the feature your plugin adds to Resque.
53
-
54
- Good:
55
-
56
- * resque-status
57
- * resque-scheduler
58
-
59
- Bad:
60
-
61
- * multi-queue
62
- * defunkt-resque-lock
63
-
64
-
65
- Hooks
66
- -----
67
-
68
- Job hook names should be namespaced to work properly.
69
-
70
- Good:
71
-
72
- * before_perform_lock
73
- * around_perform_check_status
74
-
75
- Bad:
76
-
77
- * before_perform
78
- * on_failure
79
-
80
-
81
- Lint
82
- ----
83
-
84
- Plugins should test compliance to this document using the
85
- `Resque::Plugin.lint` method.
86
-
87
- For example:
88
-
89
- assert_nothing_raised do
90
- Resque::Plugin.lint(Resque::Plugins::Lock)
91
- end
92
-
93
- [sv]: http://semver.org/
@@ -1,31 +0,0 @@
1
- # If you want to just call a method on an object in the background,
2
- # we can easily add that functionality to Resque.
3
- #
4
- # This is similar to DelayedJob's `send_later`.
5
- #
6
- # Keep in mind that, unlike DelayedJob, only simple Ruby objects
7
- # can be persisted.
8
- #
9
- # If it can be represented in JSON, it can be stored in a job.
10
-
11
- # Here's our ActiveRecord class
12
- class Repository < ActiveRecord::Base
13
- # This will be called by a worker when a job needs to be processed
14
- def self.perform(id, method, *args)
15
- find(id).send(method, *args)
16
- end
17
-
18
- # We can pass this any Repository instance method that we want to
19
- # run later.
20
- def async(method, *args)
21
- Resque.enqueue(Repository, id, method, *args)
22
- end
23
- end
24
-
25
- # Now we can call any method and have it execute later:
26
-
27
- @repo.async(:update_disk_usage)
28
-
29
- # or
30
-
31
- @repo.async(:update_network_source_id, 34)
@@ -1,71 +0,0 @@
1
- Resque Demo
2
- -----------
3
-
4
- This is a dirt simple Resque setup for you to play with.
5
-
6
-
7
- ### Starting the Demo App
8
-
9
- Here's how to run the Sinatra app:
10
-
11
- $ git clone git://github.com/defunkt/resque.git
12
- $ cd resque/examples/demo
13
- $ rackup config.ru
14
- $ open http://localhost:9292/
15
-
16
- Click 'Create New Job' a few times. You should see the number of
17
- pending jobs rising.
18
-
19
-
20
- ### Starting the Demo Worker
21
-
22
- Now in another shell terminal start the worker:
23
-
24
- $ cd resque/examples/demo
25
- $ VERBOSE=true QUEUE=default rake resque:work
26
-
27
- You should see the following output:
28
-
29
- *** Starting worker hostname:90185:default
30
- *** got: (Job{default} | Demo::Job | [{}])
31
- Processed a job!
32
- *** done: (Job{default} | Demo::Job | [{}])
33
-
34
- You can also use `VVERBOSE` (very verbose) if you want to see more:
35
-
36
- $ VERBOSE=true QUEUE=default rake resque:work
37
- *** Starting worker hostname:90399:default
38
- ** [05:55:09 2009-09-16] 90399: Registered signals
39
- ** [05:55:09 2009-09-16] 90399: Checking default
40
- ** [05:55:09 2009-09-16] 90399: Found job on default
41
- ** [05:55:09 2009-09-16] 90399: got: (Job{default} | Demo::Job | [{}])
42
- ** [05:55:09 2009-09-16] 90399: resque: Forked 90401 at 1253141709
43
- ** [05:55:09 2009-09-16] 90401: resque: Processing default since 1253141709
44
- Processed a job!
45
- ** [05:55:10 2009-09-16] 90401: done: (Job{default} | Demo::Job | [{}])
46
-
47
- Notice that our workers `require 'job'` in our `Rakefile`. This
48
- ensures they have our app loaded and can access the job classes.
49
-
50
-
51
- ### Starting the Resque frontend
52
-
53
- Great, now let's check out the Resque frontend. Either click on 'View
54
- Resque' in your web browser or run:
55
-
56
- $ open http://localhost:9292/resque/
57
-
58
- You should see the Resque web frontend. 404 page? Don't forget the
59
- trailing slash!
60
-
61
-
62
- ### config.ru
63
-
64
- The `config.ru` shows you how to mount multiple Rack apps. Resque
65
- should work fine on a subpath - feel free to load it up in your
66
- Passenger app and protect it with some basic auth.
67
-
68
-
69
- ### That's it!
70
-
71
- Click around, add some more queues, add more jobs, do whatever, have fun.
@@ -1,8 +0,0 @@
1
- $LOAD_PATH.unshift File.dirname(__FILE__) + '/../../lib'
2
- require 'resque/tasks'
3
- require 'job'
4
-
5
- desc "Start the demo using `rackup`"
6
- task :start do
7
- exec "rackup config.ru"
8
- end
@@ -1,38 +0,0 @@
1
- require 'sinatra/base'
2
- require 'resque'
3
- require 'job'
4
-
5
- module Demo
6
- class App < Sinatra::Base
7
- get '/' do
8
- info = Resque.info
9
- out = "<html><head><title>Resque Demo</title></head><body>"
10
- out << "<p>"
11
- out << "There are #{info[:pending]} pending and "
12
- out << "#{info[:processed]} processed jobs across #{info[:queues]} queues."
13
- out << "</p>"
14
- out << '<form method="POST">'
15
- out << '<input type="submit" value="Create New Job"/>'
16
- out << '&nbsp;&nbsp;<a href="/resque/">View Resque</a>'
17
- out << '</form>'
18
-
19
- out << "<form action='/failing' method='POST''>"
20
- out << '<input type="submit" value="Create Failing New Job"/>'
21
- out << '&nbsp;&nbsp;<a href="/resque/">View Resque</a>'
22
- out << '</form>'
23
-
24
- out << "</body></html>"
25
- out
26
- end
27
-
28
- post '/' do
29
- Resque.enqueue(Job, params)
30
- redirect "/"
31
- end
32
-
33
- post '/failing' do
34
- Resque.enqueue(FailingJob, params)
35
- redirect "/"
36
- end
37
- end
38
- end