backgroundrb-rails3 1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. data/.autotest +17 -0
  2. data/ChangeLog +50 -0
  3. data/Gemfile +11 -0
  4. data/LICENSE +4 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README +22 -0
  7. data/Rakefile +128 -0
  8. data/TODO.org +5 -0
  9. data/app/controller/backgroundrb_status_controller.rb +6 -0
  10. data/backgroundrb-rails3.gemspec +219 -0
  11. data/config/backgroundrb.yml +11 -0
  12. data/doc/Rakefile +5 -0
  13. data/doc/config.yaml +2 -0
  14. data/doc/content/advanced/advanced.txt +76 -0
  15. data/doc/content/advanced/advanced.yaml +4 -0
  16. data/doc/content/bugs/bugs.txt +20 -0
  17. data/doc/content/bugs/bugs.yaml +5 -0
  18. data/doc/content/community/community.txt +36 -0
  19. data/doc/content/community/community.yaml +5 -0
  20. data/doc/content/content.txt +168 -0
  21. data/doc/content/content.yaml +5 -0
  22. data/doc/content/faq/faq.txt +41 -0
  23. data/doc/content/faq/faq.yaml +5 -0
  24. data/doc/content/rails/rails.txt +182 -0
  25. data/doc/content/rails/rails.yaml +5 -0
  26. data/doc/content/scheduling/scheduling.txt +166 -0
  27. data/doc/content/scheduling/scheduling.yaml +5 -0
  28. data/doc/content/workers/workers.txt +178 -0
  29. data/doc/content/workers/workers.yaml +5 -0
  30. data/doc/layouts/default/default.erb +56 -0
  31. data/doc/layouts/default/default.yaml +4 -0
  32. data/doc/lib/default.rb +7 -0
  33. data/doc/output/Assets/BG-Ad-Top.png +0 -0
  34. data/doc/output/Assets/BG-Body.png +0 -0
  35. data/doc/output/Assets/BG-Feed.png +0 -0
  36. data/doc/output/Assets/BG-Menu-Hover.png +0 -0
  37. data/doc/output/Assets/BG-Menu.png +0 -0
  38. data/doc/output/Assets/BG-Sidebar-Bottom.png +0 -0
  39. data/doc/output/Assets/Button-Feed.png +0 -0
  40. data/doc/output/images/bg-ad-top.png +0 -0
  41. data/doc/output/images/bg-body.png +0 -0
  42. data/doc/output/images/bg-feed.gif +0 -0
  43. data/doc/output/images/bg-footer.jpg +0 -0
  44. data/doc/output/images/bg-header.jpg +0 -0
  45. data/doc/output/images/bg-menu-hover.png +0 -0
  46. data/doc/output/images/bg-menu.png +0 -0
  47. data/doc/output/images/bg-sidebar-bottom.gif +0 -0
  48. data/doc/output/images/button-feed.png +0 -0
  49. data/doc/output/images/icon-comment.png +0 -0
  50. data/doc/output/images/more_icon.gif +0 -0
  51. data/doc/output/style.css +299 -0
  52. data/doc/page_defaults.yaml +13 -0
  53. data/doc/tasks/default.rake +3 -0
  54. data/doc/templates/default/default.txt +1 -0
  55. data/doc/templates/default/default.yaml +4 -0
  56. data/examples/backgroundrb.yml +25 -0
  57. data/examples/foo_controller.rb +48 -0
  58. data/examples/god_worker.rb +7 -0
  59. data/examples/worker_tests/god_worker_test.rb +8 -0
  60. data/examples/workers/error_worker.rb +17 -0
  61. data/examples/workers/foo_worker.rb +38 -0
  62. data/examples/workers/god_worker.rb +7 -0
  63. data/examples/workers/model_worker.rb +13 -0
  64. data/examples/workers/renewal_worker.rb +11 -0
  65. data/examples/workers/rss_worker.rb +26 -0
  66. data/examples/workers/server_worker.rb +31 -0
  67. data/examples/workers/world_worker.rb +12 -0
  68. data/examples/workers/xmpp_worker.rb +7 -0
  69. data/init.rb +7 -0
  70. data/install.rb +1 -0
  71. data/know_issues.org +5 -0
  72. data/lib/backgroundrb.rb +1 -0
  73. data/lib/backgroundrb/bdrb_client_helper.rb +8 -0
  74. data/lib/backgroundrb/bdrb_cluster_connection.rb +156 -0
  75. data/lib/backgroundrb/bdrb_config.rb +43 -0
  76. data/lib/backgroundrb/bdrb_conn_error.rb +29 -0
  77. data/lib/backgroundrb/bdrb_connection.rb +179 -0
  78. data/lib/backgroundrb/bdrb_job_queue.rb +79 -0
  79. data/lib/backgroundrb/bdrb_result.rb +19 -0
  80. data/lib/backgroundrb/bdrb_start_stop.rb +146 -0
  81. data/lib/backgroundrb/rails_worker_proxy.rb +181 -0
  82. data/lib/backgroundrb/railtie.rb +48 -0
  83. data/lib/generators/backgroundrb/bdrb_migration/USAGE +12 -0
  84. data/lib/generators/backgroundrb/bdrb_migration/bdrb_migration_generator.rb +15 -0
  85. data/lib/generators/backgroundrb/bdrb_migration/templates/migration.rb +27 -0
  86. data/lib/generators/backgroundrb/worker/USAGE +16 -0
  87. data/lib/generators/backgroundrb/worker/templates/unit_test.rb +12 -0
  88. data/lib/generators/backgroundrb/worker/templates/worker.rb +7 -0
  89. data/lib/generators/backgroundrb/worker/worker_generator.rb +14 -0
  90. data/lib/tasks/backgroundrb_tasks.rake +103 -0
  91. data/release_notes.org +48 -0
  92. data/release_points.org +46 -0
  93. data/script/backgroundrb +52 -0
  94. data/script/bdrb_test_helper.rb +99 -0
  95. data/script/load_worker_env.rb +31 -0
  96. data/script/monitrc +25 -0
  97. data/server/backgroundrb_server.rb +12 -0
  98. data/server/lib/bdrb_result_storage.rb +62 -0
  99. data/server/lib/bdrb_server_helper.rb +24 -0
  100. data/server/lib/bdrb_thread_pool.rb +127 -0
  101. data/server/lib/cron_trigger.rb +197 -0
  102. data/server/lib/invalid_dump_error.rb +4 -0
  103. data/server/lib/log_worker.rb +25 -0
  104. data/server/lib/master_proxy.rb +140 -0
  105. data/server/lib/master_worker.rb +187 -0
  106. data/server/lib/meta_worker.rb +432 -0
  107. data/server/lib/trigger.rb +34 -0
  108. data/test/bdrb_client_test_helper.rb +5 -0
  109. data/test/bdrb_test_helper.rb +35 -0
  110. data/test/client/backgroundrb.yml +17 -0
  111. data/test/client/test_bdrb_client_helper.rb +13 -0
  112. data/test/client/test_bdrb_cluster_connection.rb +162 -0
  113. data/test/client/test_bdrb_config.rb +20 -0
  114. data/test/client/test_bdrb_connection.rb +29 -0
  115. data/test/client/test_bdrb_job_queue.rb +63 -0
  116. data/test/client/test_worker_proxy.rb +130 -0
  117. data/test/server/test_cron_trigger.rb +281 -0
  118. data/test/server/test_master_proxy.rb +54 -0
  119. data/test/server/test_master_worker.rb +157 -0
  120. data/test/server/test_meta_worker.rb +281 -0
  121. data/test/server/test_result_storage.rb +14 -0
  122. data/test/socket_mocker.rb +34 -0
  123. data/test/workers/bar_worker.rb +10 -0
  124. data/test/workers/foo_worker.rb +10 -0
  125. data/uninstall.rb +1 -0
  126. metadata +345 -0
@@ -0,0 +1,281 @@
1
+ require File.join(File.dirname(__FILE__) + "/../bdrb_test_helper")
2
+ require "meta_worker"
3
+ require "chronic"
4
+
5
+ context "A Meta Worker should" do
6
+ module Kernel
7
+ def packet_dump data
8
+ t = Marshal.dump(data)
9
+ t.length.to_s.rjust(9,'0') + t
10
+ end
11
+ end
12
+ setup do
13
+ options = {:schedules =>
14
+ {
15
+ :proper_worker => { :barbar => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }},
16
+ :bar_worker => { :do_job => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }}
17
+ },
18
+ :backgroundrb => {:log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"}
19
+ }
20
+ BDRB_CONFIG.set(options)
21
+
22
+ BackgrounDRb::MetaWorker.worker_name = "hello_worker"
23
+
24
+ class ProperWorker < BackgrounDRb::MetaWorker
25
+ attr_accessor :outgoing_data
26
+ attr_accessor :incoming_data
27
+ set_worker_name :proper_worker
28
+ def send_data(data)
29
+ @outgoing_data = data
30
+ end
31
+
32
+ def start_reactor; end
33
+
34
+ def ivar(var)
35
+ instance_variable_get("@#{var}")
36
+ end
37
+ end
38
+ @meta_worker = ProperWorker.start_worker
39
+ end
40
+
41
+ specify "load appropriate db environment from config file" do
42
+ ENV["RAILS_ENV"] = BDRB_CONFIG[:backgroundrb][:environment]
43
+ @meta_worker.send(:load_rails_env)
44
+ ActiveRecord::Base.connection.current_database.should == "rails_sandbox_production"
45
+ end
46
+
47
+
48
+ specify "load appropriate schedule from config file" do
49
+ @meta_worker.my_schedule.should.not == nil
50
+ @meta_worker.my_schedule.should == {:barbar=>{:data=>"Hello World", :trigger_args=>"*/5 * * * * *"}}
51
+ trigger = @meta_worker.ivar(:worker_method_triggers)
52
+ trigger.should.not == nil
53
+ trigger[:barbar][:data].should == "Hello World"
54
+ end
55
+
56
+ specify "should load passed data and invoke methods" do
57
+ a = {:data=>{:worker_method=>"who", :arg=>"rails"}, :type=>:request, :result=>false, :client_signature=>9}
58
+ b = {:data=>{:worker_method=>"baz", :arg=>"rails"}, :type=>:request, :result=>true, :client_signature=>9}
59
+ c = {:data=>{:job_key=>:start_message}, :type=>:get_result, :result=>true, :client_signature=>9}
60
+ t_request = "000000088\004\b{\t:\ttype:\frequest:\025client_signaturei\016:\vresultF:\tdata{\a:\022worker_method\"\bwho:\barg\"\nrails"
61
+ @meta_worker.expects(:receive_data).with(a).returns(nil)
62
+ @meta_worker.receive_internal_data(t_request)
63
+ end
64
+
65
+ specify "should invoke async tasks without sending results" do
66
+ a = {:data=>{:worker_method=>"who", :arg=>"rails",:job_key => "lol"}, :type=>:request, :result=>false, :client_signature=>9}
67
+ @meta_worker.expects(:who).with("rails").returns(nil)
68
+ @meta_worker.receive_internal_data(packet_dump(a))
69
+ Thread.current[:job_key].should == "lol"
70
+ end
71
+
72
+ specify "should invoke sync methods and return results back" do
73
+ class << @meta_worker
74
+ def baz args
75
+ "hello : #{args}"
76
+ end
77
+ end
78
+ b = {:data=>{:worker_method=>"baz", :arg=>"rails"}, :type=>:request, :result=>true, :client_signature=>9}
79
+ @meta_worker.expects(:send_data).with({:data=>"hello : rails", :type=>:response, :result=>true, :client_signature=>9, :result_flag => "ok"}).returns("hello : rails")
80
+ @meta_worker.receive_internal_data(packet_dump(b))
81
+ Thread.current[:job_key].should == nil
82
+ end
83
+
84
+ specify "should invoke methods with and without args correctly" do
85
+ class << @meta_worker
86
+ attr_accessor :outgoing_data
87
+ def send_data data
88
+ @outgoing_data = data
89
+ end
90
+ end
91
+ b = {:data=> {:worker_method=>"baz", :arg => { :name => "bdrb",:age => 10} }, :type=>:request, :result=>true, :client_signature=>9 }
92
+ # @meta_worker.expects(:send_data).with({:data=>"hello : rails", :type=>:response, :result=>true, :client_signature=>9}).returns("hello : rails")
93
+ @meta_worker.expects(:baz).with({ :name => "bdrb",:age => 10}).returns("foo")
94
+ @meta_worker.receive_internal_data(packet_dump(b))
95
+ @meta_worker.outgoing_data[:data].should == "foo"
96
+ Thread.current[:job_key].should == nil
97
+ end
98
+
99
+ specify "for result request" do
100
+ class << @meta_worker
101
+ attr_accessor :t_result
102
+ def send_data data
103
+ @t_result = data
104
+ end
105
+ end
106
+ @meta_worker.cache[:start_message] = "helloworld"
107
+ c = {:data=>{:job_key=>:start_message}, :type=>:get_result, :result=>true, :client_signature=>9}
108
+ @meta_worker.receive_internal_data(packet_dump(c))
109
+ @meta_worker.t_result[:data].should == "helloworld"
110
+ end
111
+
112
+ specify "for results that cant be dumped" do
113
+ class << @meta_worker
114
+ def baz args
115
+ proc { "boy"}
116
+ end
117
+ def send_data input
118
+ packet_dump(input)
119
+ end
120
+ end
121
+ b = {:data=>{:worker_method=>"baz", :arg=>"rails"}, :type=>:request, :result=>true, :client_signature=>9}
122
+ a = @meta_worker.receive_internal_data(packet_dump(b))
123
+ p a
124
+ Thread.current[:job_key].should == nil
125
+ end
126
+ end
127
+
128
+ context "For unix schedulers" do
129
+ specify "remove a task from schedule if end time is reached" do
130
+ options = {:schedules =>
131
+ {
132
+ :unix_worker => { :barbar => { :trigger_args =>
133
+ {
134
+ :start => (Time.now + 2.seconds).to_s,
135
+ :end => (Time.now + 10.seconds).to_s,
136
+ :repeat_interval => 2.seconds,
137
+ :data => "unix_worker"
138
+ }
139
+ }
140
+ },
141
+ },
142
+ :backgroundrb =>
143
+ {
144
+ :log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"
145
+ }
146
+ }
147
+ BDRB_CONFIG.set(options)
148
+
149
+ class UnixWorker < BackgrounDRb::MetaWorker
150
+ attr_accessor :outgoing_data
151
+ attr_accessor :incoming_data
152
+ set_worker_name :unix_worker
153
+ def send_data(data)
154
+ @outgoing_data = data
155
+ end
156
+
157
+ def start_reactor; end
158
+
159
+ def ivar(var)
160
+ instance_variable_get("@#{var}")
161
+ end
162
+ end
163
+ @meta_worker = UnixWorker.start_worker
164
+ @meta_worker.my_schedule.should.not == nil
165
+ @meta_worker.ivar(:worker_method_triggers).should.not == nil
166
+ @meta_worker.ivar(:worker_method_triggers)[:barbar].should.not == nil
167
+ end
168
+ end
169
+
170
+ context "Worker without names" do
171
+ specify "should throw an error on initialization" do
172
+ options = {:schedules =>
173
+ {
174
+ :foo_worker => { :barbar => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }},
175
+ :bar_worker => { :do_job => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }}
176
+ },
177
+ :backgroundrb => {:log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"}
178
+ }
179
+ BDRB_CONFIG.set(options)
180
+
181
+ BackgrounDRb::MetaWorker.worker_name = "hello_worker"
182
+
183
+ class BoyWorker < BackgrounDRb::MetaWorker
184
+ attr_accessor :outgoing_data
185
+ attr_accessor :incoming_data
186
+ def send_data(data)
187
+ @outgoing_data = data
188
+ end
189
+
190
+ def start_reactor; end
191
+ end
192
+ should.raise { @meta_worker = BoyWorker.start_worker }
193
+ end
194
+ end
195
+
196
+ context "Worker with options" do
197
+ specify "should load schedule from passed options" do
198
+ options = { :backgroundrb => {:log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"}}
199
+ BDRB_CONFIG.set(options)
200
+
201
+ BackgrounDRb::MetaWorker.worker_name = "hello_worker"
202
+
203
+ class CrapWorker < BackgrounDRb::MetaWorker
204
+ set_worker_name :crap_worker
205
+ set_no_auto_load true
206
+ attr_accessor :outgoing_data
207
+ attr_accessor :incoming_data
208
+ def send_data(data)
209
+ @outgoing_data = data
210
+ end
211
+
212
+ def start_reactor; end
213
+ def ivar(var); instance_variable_get("@#{var}"); end
214
+ end
215
+ write_end = mock()
216
+ read_end = mock()
217
+ worker_options = { :write_end => mock(),:read_end => mock(),
218
+ :options => {
219
+ :data => "hello", :schedule => {
220
+ :hello_world => { :trigger_args => "*/5 * * * * * *",
221
+ :data => "hello_world"
222
+ }
223
+ }
224
+ }
225
+ }
226
+ CrapWorker.any_instance.expects(:create).with("hello").returns(true)
227
+ @meta_worker = CrapWorker.start_worker(worker_options)
228
+ @meta_worker.my_schedule.should == {:hello_world=>{:data=>"hello_world", :trigger_args=>"*/5 * * * * * *"}}
229
+ end
230
+ end
231
+
232
+ context "For enqueued tasks" do
233
+ setup do
234
+ options = {:schedules =>
235
+ {
236
+ :proper_worker => { :barbar => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }},
237
+ :bar_worker => { :do_job => {:trigger_args=>"*/5 * * * * *", :data =>"Hello World" }}
238
+ },
239
+ :backgroundrb => {:log => "foreground", :debug_log => false, :environment => "production", :port => 11006, :ip => "localhost"}
240
+ }
241
+ BDRB_CONFIG.set(options)
242
+
243
+ class BdrbJobQueue < ActiveRecord::Base; end
244
+ class QueueWorker < BackgrounDRb::MetaWorker
245
+ attr_accessor :outgoing_data
246
+ attr_accessor :incoming_data
247
+ set_worker_name :queue_worker
248
+ def send_data(data)
249
+ @outgoing_data = data
250
+ end
251
+
252
+ def start_reactor; end
253
+
254
+ def ivar(var)
255
+ instance_variable_get("@#{var}")
256
+ end
257
+ end
258
+ end
259
+
260
+ specify "should run enqueued tasks with arguments if they are there in the queue" do
261
+ @meta_worker = QueueWorker.start_worker
262
+ mocked_task = mock()
263
+ mocked_task.expects(:worker_method).returns(:barbar).times(2)
264
+ mocked_task.expects(:args).returns(Marshal.dump("hello"))
265
+ mocked_task.expects(:[]).returns(1).times(2)
266
+ @meta_worker.expects(:barbar).with("hello").returns(true)
267
+ BdrbJobQueue.expects(:find_next).with("queue_worker").returns(mocked_task)
268
+ @meta_worker.check_for_enqueued_tasks
269
+ end
270
+
271
+ specify "should run enqueued tasks without arguments if they are there in the queue" do
272
+ @meta_worker = QueueWorker.start_worker
273
+ mocked_task = mock()
274
+ mocked_task.expects(:[]).returns(1).times(2)
275
+ mocked_task.expects(:worker_method).returns(:barbar).times(2)
276
+ mocked_task.expects(:args).returns(nil)
277
+ @meta_worker.expects(:barbar)
278
+ BdrbJobQueue.expects(:find_next).with("queue_worker").returns(mocked_task)
279
+ @meta_worker.check_for_enqueued_tasks
280
+ end
281
+ end
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__) + "/..","bdrb_test_helper")
2
+
3
+ context "Result storage" do
4
+ setup do
5
+ @cache = BackgrounDRb::ResultStorage.new(:some_worker,:crap)
6
+ end
7
+
8
+ specify "should store result" do
9
+ @cache[:foo] = "Wow"
10
+ @cache[:foo].should == "Wow"
11
+ @cache.delete(:foo)
12
+ @cache[:foo].should == nil
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ require "socket"
2
+
3
+ class TCPSocket
4
+ attr_accessor :connection_status
5
+ attr_accessor :internal_buffer
6
+ def initialize ip,port
7
+ @internal_buffer = []
8
+ end
9
+
10
+ def trigger
11
+
12
+ end
13
+
14
+ def self.open server_ip
15
+
16
+ end
17
+
18
+ def setsockopt *args; end
19
+
20
+ def >> crap
21
+ @internal_buffer << Marshal.dump(crap)
22
+ end
23
+
24
+ def read
25
+ @internal_buffer.shift
26
+ end
27
+
28
+ def write crap; end
29
+
30
+
31
+ def close
32
+ @connection_status = :closed
33
+ end
34
+ end
@@ -0,0 +1,10 @@
1
+ class BarWorker < BackgrounDRb::MetaWorker
2
+ set_worker_name :bar_worker
3
+ reload_on_schedule true
4
+ def create
5
+
6
+ end
7
+ def do_job
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class FooWorker < BackgrounDRb::MetaWorker
2
+ set_worker_name :foo_worker
3
+ reload_on_schedule :true
4
+ def create args = nil
5
+ end
6
+
7
+ def barbar args
8
+ "lol"
9
+ end
10
+ end
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,345 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: backgroundrb-rails3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 13
5
+ prerelease: false
6
+ segments:
7
+ - 1
8
+ - 1
9
+ version: "1.1"
10
+ platform: ruby
11
+ authors:
12
+ - Matteo Latini
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-12-14 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ requirement: &id001 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ hash: 17
27
+ segments:
28
+ - 0
29
+ - 2
30
+ - 3
31
+ version: 0.2.3
32
+ type: :runtime
33
+ name: chronic
34
+ prerelease: false
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - "="
41
+ - !ruby/object:Gem::Version
42
+ hash: 5
43
+ segments:
44
+ - 0
45
+ - 1
46
+ - 15
47
+ version: 0.1.15
48
+ type: :runtime
49
+ name: packet
50
+ prerelease: false
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ type: :development
63
+ name: shoulda
64
+ prerelease: false
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ hash: 23
73
+ segments:
74
+ - 1
75
+ - 0
76
+ - 0
77
+ version: 1.0.0
78
+ type: :development
79
+ name: bundler
80
+ prerelease: false
81
+ version_requirements: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ hash: 1
89
+ segments:
90
+ - 1
91
+ - 5
92
+ - 1
93
+ version: 1.5.1
94
+ type: :development
95
+ name: jeweler
96
+ prerelease: false
97
+ version_requirements: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ requirement: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ type: :development
109
+ name: rcov
110
+ prerelease: false
111
+ version_requirements: *id006
112
+ - !ruby/object:Gem::Dependency
113
+ requirement: &id007 !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ hash: 17
119
+ segments:
120
+ - 0
121
+ - 2
122
+ - 3
123
+ version: 0.2.3
124
+ type: :runtime
125
+ name: chronic
126
+ prerelease: false
127
+ version_requirements: *id007
128
+ - !ruby/object:Gem::Dependency
129
+ requirement: &id008 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ hash: 5
135
+ segments:
136
+ - 0
137
+ - 1
138
+ - 15
139
+ version: 0.1.15
140
+ type: :runtime
141
+ name: packet
142
+ prerelease: false
143
+ version_requirements: *id008
144
+ description: |-
145
+
146
+ BackgrounDRb is a Ruby job server and scheduler. Its main intent is to be used with Ruby on Rails applications for offloading long-running tasks.
147
+ Since a Rails application blocks while serving a request it is best to move long-running tasks off into a background process that is divorced from http request/response cycle.
148
+ email: mtylty@gmail.com
149
+ executables: []
150
+
151
+ extensions: []
152
+
153
+ extra_rdoc_files:
154
+ - ChangeLog
155
+ - LICENSE
156
+ - README
157
+ files:
158
+ - .autotest
159
+ - ChangeLog
160
+ - Gemfile
161
+ - LICENSE
162
+ - MIT-LICENSE
163
+ - README
164
+ - Rakefile
165
+ - TODO.org
166
+ - app/controller/backgroundrb_status_controller.rb
167
+ - backgroundrb-rails3.gemspec
168
+ - config/backgroundrb.yml
169
+ - doc/Rakefile
170
+ - doc/config.yaml
171
+ - doc/content/advanced/advanced.txt
172
+ - doc/content/advanced/advanced.yaml
173
+ - doc/content/bugs/bugs.txt
174
+ - doc/content/bugs/bugs.yaml
175
+ - doc/content/community/community.txt
176
+ - doc/content/community/community.yaml
177
+ - doc/content/content.txt
178
+ - doc/content/content.yaml
179
+ - doc/content/faq/faq.txt
180
+ - doc/content/faq/faq.yaml
181
+ - doc/content/rails/rails.txt
182
+ - doc/content/rails/rails.yaml
183
+ - doc/content/scheduling/scheduling.txt
184
+ - doc/content/scheduling/scheduling.yaml
185
+ - doc/content/workers/workers.txt
186
+ - doc/content/workers/workers.yaml
187
+ - doc/layouts/default/default.erb
188
+ - doc/layouts/default/default.yaml
189
+ - doc/lib/default.rb
190
+ - doc/output/Assets/BG-Ad-Top.png
191
+ - doc/output/Assets/BG-Body.png
192
+ - doc/output/Assets/BG-Feed.png
193
+ - doc/output/Assets/BG-Menu-Hover.png
194
+ - doc/output/Assets/BG-Menu.png
195
+ - doc/output/Assets/BG-Sidebar-Bottom.png
196
+ - doc/output/Assets/Button-Feed.png
197
+ - doc/output/images/bg-ad-top.png
198
+ - doc/output/images/bg-body.png
199
+ - doc/output/images/bg-feed.gif
200
+ - doc/output/images/bg-footer.jpg
201
+ - doc/output/images/bg-header.jpg
202
+ - doc/output/images/bg-menu-hover.png
203
+ - doc/output/images/bg-menu.png
204
+ - doc/output/images/bg-sidebar-bottom.gif
205
+ - doc/output/images/button-feed.png
206
+ - doc/output/images/icon-comment.png
207
+ - doc/output/images/more_icon.gif
208
+ - doc/output/style.css
209
+ - doc/page_defaults.yaml
210
+ - doc/tasks/default.rake
211
+ - doc/templates/default/default.txt
212
+ - doc/templates/default/default.yaml
213
+ - examples/backgroundrb.yml
214
+ - examples/foo_controller.rb
215
+ - examples/god_worker.rb
216
+ - examples/worker_tests/god_worker_test.rb
217
+ - examples/workers/error_worker.rb
218
+ - examples/workers/foo_worker.rb
219
+ - examples/workers/god_worker.rb
220
+ - examples/workers/model_worker.rb
221
+ - examples/workers/renewal_worker.rb
222
+ - examples/workers/rss_worker.rb
223
+ - examples/workers/server_worker.rb
224
+ - examples/workers/world_worker.rb
225
+ - examples/workers/xmpp_worker.rb
226
+ - init.rb
227
+ - install.rb
228
+ - know_issues.org
229
+ - lib/backgroundrb.rb
230
+ - lib/backgroundrb/bdrb_client_helper.rb
231
+ - lib/backgroundrb/bdrb_cluster_connection.rb
232
+ - lib/backgroundrb/bdrb_config.rb
233
+ - lib/backgroundrb/bdrb_conn_error.rb
234
+ - lib/backgroundrb/bdrb_connection.rb
235
+ - lib/backgroundrb/bdrb_job_queue.rb
236
+ - lib/backgroundrb/bdrb_result.rb
237
+ - lib/backgroundrb/bdrb_start_stop.rb
238
+ - lib/backgroundrb/rails_worker_proxy.rb
239
+ - lib/backgroundrb/railtie.rb
240
+ - lib/generators/backgroundrb/bdrb_migration/USAGE
241
+ - lib/generators/backgroundrb/bdrb_migration/bdrb_migration_generator.rb
242
+ - lib/generators/backgroundrb/bdrb_migration/templates/migration.rb
243
+ - lib/generators/backgroundrb/worker/USAGE
244
+ - lib/generators/backgroundrb/worker/templates/unit_test.rb
245
+ - lib/generators/backgroundrb/worker/templates/worker.rb
246
+ - lib/generators/backgroundrb/worker/worker_generator.rb
247
+ - lib/tasks/backgroundrb_tasks.rake
248
+ - release_notes.org
249
+ - release_points.org
250
+ - script/backgroundrb
251
+ - script/bdrb_test_helper.rb
252
+ - script/load_worker_env.rb
253
+ - script/monitrc
254
+ - server/backgroundrb_server.rb
255
+ - server/lib/bdrb_result_storage.rb
256
+ - server/lib/bdrb_server_helper.rb
257
+ - server/lib/bdrb_thread_pool.rb
258
+ - server/lib/cron_trigger.rb
259
+ - server/lib/invalid_dump_error.rb
260
+ - server/lib/log_worker.rb
261
+ - server/lib/master_proxy.rb
262
+ - server/lib/master_worker.rb
263
+ - server/lib/meta_worker.rb
264
+ - server/lib/trigger.rb
265
+ - test/bdrb_client_test_helper.rb
266
+ - test/bdrb_test_helper.rb
267
+ - test/client/backgroundrb.yml
268
+ - test/client/test_bdrb_client_helper.rb
269
+ - test/client/test_bdrb_cluster_connection.rb
270
+ - test/client/test_bdrb_config.rb
271
+ - test/client/test_bdrb_connection.rb
272
+ - test/client/test_bdrb_job_queue.rb
273
+ - test/client/test_worker_proxy.rb
274
+ - test/server/test_cron_trigger.rb
275
+ - test/server/test_master_proxy.rb
276
+ - test/server/test_master_worker.rb
277
+ - test/server/test_meta_worker.rb
278
+ - test/server/test_result_storage.rb
279
+ - test/socket_mocker.rb
280
+ - test/workers/bar_worker.rb
281
+ - test/workers/foo_worker.rb
282
+ - uninstall.rb
283
+ has_rdoc: true
284
+ homepage: http://github.com/mtylty/backgroundrb-rails3
285
+ licenses:
286
+ - MIT
287
+ post_install_message:
288
+ rdoc_options: []
289
+
290
+ require_paths:
291
+ - lib
292
+ required_ruby_version: !ruby/object:Gem::Requirement
293
+ none: false
294
+ requirements:
295
+ - - ">="
296
+ - !ruby/object:Gem::Version
297
+ hash: 3
298
+ segments:
299
+ - 0
300
+ version: "0"
301
+ required_rubygems_version: !ruby/object:Gem::Requirement
302
+ none: false
303
+ requirements:
304
+ - - ">="
305
+ - !ruby/object:Gem::Version
306
+ hash: 3
307
+ segments:
308
+ - 0
309
+ version: "0"
310
+ requirements: []
311
+
312
+ rubyforge_project:
313
+ rubygems_version: 1.3.7
314
+ signing_key:
315
+ specification_version: 3
316
+ summary: BackgrounDRb is a Ruby job server and scheduler.
317
+ test_files:
318
+ - examples/foo_controller.rb
319
+ - examples/god_worker.rb
320
+ - examples/worker_tests/god_worker_test.rb
321
+ - examples/workers/error_worker.rb
322
+ - examples/workers/foo_worker.rb
323
+ - examples/workers/god_worker.rb
324
+ - examples/workers/model_worker.rb
325
+ - examples/workers/renewal_worker.rb
326
+ - examples/workers/rss_worker.rb
327
+ - examples/workers/server_worker.rb
328
+ - examples/workers/world_worker.rb
329
+ - examples/workers/xmpp_worker.rb
330
+ - test/bdrb_client_test_helper.rb
331
+ - test/bdrb_test_helper.rb
332
+ - test/client/test_bdrb_client_helper.rb
333
+ - test/client/test_bdrb_cluster_connection.rb
334
+ - test/client/test_bdrb_config.rb
335
+ - test/client/test_bdrb_connection.rb
336
+ - test/client/test_bdrb_job_queue.rb
337
+ - test/client/test_worker_proxy.rb
338
+ - test/server/test_cron_trigger.rb
339
+ - test/server/test_master_proxy.rb
340
+ - test/server/test_master_worker.rb
341
+ - test/server/test_meta_worker.rb
342
+ - test/server/test_result_storage.rb
343
+ - test/socket_mocker.rb
344
+ - test/workers/bar_worker.rb
345
+ - test/workers/foo_worker.rb