job_boss 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +43 -0
- data/Rakefile +15 -0
- data/bin/job_boss +27 -0
- data/doc/ActiveRecord/Base.html +343 -0
- data/doc/ActiveRecord.html +185 -0
- data/doc/CreateJobs.html +256 -0
- data/doc/JobBoss/Boss.html +413 -0
- data/doc/JobBoss/Config.html +342 -0
- data/doc/JobBoss/Job.html +754 -0
- data/doc/JobBoss/Queuer.html +231 -0
- data/doc/JobBoss.html +480 -0
- data/doc/Mongrel/HttpServer.html +275 -0
- data/doc/Mongrel.html +185 -0
- data/doc/Passenger/Railz/RequestHandler.html +271 -0
- data/doc/Passenger/Railz.html +185 -0
- data/doc/Passenger.html +185 -0
- data/doc/PhusionPassenger/Rack/RequestHandler.html +271 -0
- data/doc/PhusionPassenger/Rack.html +185 -0
- data/doc/PhusionPassenger/Railz/RequestHandler.html +271 -0
- data/doc/PhusionPassenger/Railz.html +185 -0
- data/doc/PhusionPassenger.html +187 -0
- data/doc/Rakefile.html +115 -0
- data/doc/Spawn/SpawnId.html +276 -0
- data/doc/Spawn.html +742 -0
- data/doc/bin/job_boss.html +58 -0
- data/doc/created.rid +9 -0
- data/doc/index.html +126 -0
- data/doc/lib/job_boss/boss_rb.html +64 -0
- data/doc/lib/job_boss/capistrano_rb.html +60 -0
- data/doc/lib/job_boss/configuror_rb.html +54 -0
- data/doc/lib/job_boss/job_rb.html +56 -0
- data/doc/lib/job_boss/queuer_rb.html +56 -0
- data/doc/lib/migrate_rb.html +52 -0
- data/doc/rdoc.css +706 -0
- data/doc/vendor/spawn/CHANGELOG.html +275 -0
- data/doc/vendor/spawn/LICENSE.html +151 -0
- data/doc/vendor/spawn/init_rb.html +54 -0
- data/doc/vendor/spawn/lib/patches_rb.html +56 -0
- data/doc/vendor/spawn/lib/spawn_rb.html +52 -0
- data/job_boss.gemspec +26 -0
- data/lib/job_boss/boss.rb +153 -0
- data/lib/job_boss/capistrano.rb +8 -0
- data/lib/job_boss/configuror.rb +40 -0
- data/lib/job_boss/job.rb +155 -0
- data/lib/job_boss/queuer.rb +37 -0
- data/lib/migrate.rb +27 -0
- metadata +151 -0
data/README.markdown
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# job_boss
|
2
|
+
|
3
|
+
## Credits
|
4
|
+
|
5
|
+
The idea for this gem came from trying to use working/starling and not having much success with stability. After some discussions with my colleagues (Neil Cook and Justin Hahn) and some good ideas, I created job_boss
|
6
|
+
|
7
|
+
## Purpose
|
8
|
+
|
9
|
+
job_boss allows you to have a daemon much in the same way as workling which allows you to process a series of jobs asynchronously. job_boss, however, uses ActiveRecord to store queued job requests in a database thus simplifying dependencies. This allows for us to process chunks of work in parallel, across multiple servers, without needing much setup
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
Add the gem to your Gemfile
|
14
|
+
|
15
|
+
gem 'job_boss'
|
16
|
+
|
17
|
+
or install it
|
18
|
+
|
19
|
+
gem install job_boss
|
20
|
+
|
21
|
+
Create a directory to store classes which define code which can be executed by the job boss (the default directory is 'app/jobs') and create class files such as this:
|
22
|
+
|
23
|
+
# app/jobs/math_jobs.rb
|
24
|
+
class MathJobs
|
25
|
+
def is_prime?(i)
|
26
|
+
('1' * i) !~ /^1?$|^(11+?)\1+$/
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
Start up your boss:
|
31
|
+
|
32
|
+
job_boss start
|
33
|
+
|
34
|
+
From your Rails code or in a console (this functionality should probably be encapsulated in the job_boss gem):
|
35
|
+
|
36
|
+
require 'job_boss/boss'
|
37
|
+
jobs = (0..1000).collect do |i|
|
38
|
+
JobBoss::Boss.queue.math.is_prime?(i)
|
39
|
+
end
|
40
|
+
|
41
|
+
JobBoss::Job.wait_for_jobs(jobs) # Will sleep until the jobs are all complete
|
42
|
+
|
43
|
+
JobBoss::Job.result_hash(jobs) # => {[0]=>"f", [1]=>"f", [2]=>true, [3]=>true, [4]=>"f", ... }
|
data/Rakefile
ADDED
data/bin/job_boss
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'daemons'
|
5
|
+
|
6
|
+
BOSS_PID = Process.pid
|
7
|
+
|
8
|
+
working_dir = Dir.pwd
|
9
|
+
|
10
|
+
daemons_options = {
|
11
|
+
:dir_mode => :script,
|
12
|
+
:dir => 'pids'
|
13
|
+
}
|
14
|
+
|
15
|
+
Daemons.run_proc('job_boss', daemons_options) do
|
16
|
+
Dir.chdir(working_dir)
|
17
|
+
|
18
|
+
require 'job_boss/boss'
|
19
|
+
|
20
|
+
command, daemon_options, app_options = Daemons::Controller.split_argv(ARGV)
|
21
|
+
|
22
|
+
JobBoss::Boss.config.parse_args(app_options, :working_dir => working_dir)
|
23
|
+
|
24
|
+
boss = JobBoss::Boss.new
|
25
|
+
|
26
|
+
boss.start
|
27
|
+
end
|
@@ -0,0 +1,343 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
|
7
|
+
|
8
|
+
<title>Class: ActiveRecord::Base</title>
|
9
|
+
|
10
|
+
<link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
|
11
|
+
|
12
|
+
<script src="../js/jquery.js" type="text/javascript"
|
13
|
+
charset="utf-8"></script>
|
14
|
+
<script src="../js/thickbox-compressed.js" type="text/javascript"
|
15
|
+
charset="utf-8"></script>
|
16
|
+
<script src="../js/quicksearch.js" type="text/javascript"
|
17
|
+
charset="utf-8"></script>
|
18
|
+
<script src="../js/darkfish.js" type="text/javascript"
|
19
|
+
charset="utf-8"></script>
|
20
|
+
|
21
|
+
</head>
|
22
|
+
<body class="class">
|
23
|
+
|
24
|
+
<div id="metadata">
|
25
|
+
<div id="home-metadata">
|
26
|
+
<div id="home-section" class="section">
|
27
|
+
<h3 class="section-header">
|
28
|
+
<a href="../index.html">Home</a>
|
29
|
+
<a href="../index.html#classes">Classes</a>
|
30
|
+
<a href="../index.html#methods">Methods</a>
|
31
|
+
</h3>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="file-metadata">
|
36
|
+
<div id="file-list-section" class="section">
|
37
|
+
<h3 class="section-header">In Files</h3>
|
38
|
+
<div class="section-body">
|
39
|
+
<ul>
|
40
|
+
|
41
|
+
<li><a href="../vendor/spawn/lib/patches_rb.html?TB_iframe=true&height=550&width=785"
|
42
|
+
class="thickbox" title="vendor/spawn/lib/patches.rb">vendor/spawn/lib/patches.rb</a></li>
|
43
|
+
|
44
|
+
</ul>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
|
49
|
+
</div>
|
50
|
+
|
51
|
+
<div id="class-metadata">
|
52
|
+
|
53
|
+
<!-- Parent Class -->
|
54
|
+
|
55
|
+
<div id="parent-class-section" class="section">
|
56
|
+
<h3 class="section-header">Parent</h3>
|
57
|
+
|
58
|
+
<p class="link">Object</p>
|
59
|
+
|
60
|
+
</div>
|
61
|
+
|
62
|
+
|
63
|
+
<!-- Namespace Contents -->
|
64
|
+
|
65
|
+
|
66
|
+
<!-- Method Quickref -->
|
67
|
+
|
68
|
+
<div id="method-list-section" class="section">
|
69
|
+
<h3 class="section-header">Methods</h3>
|
70
|
+
<ul class="link-list">
|
71
|
+
|
72
|
+
<li><a href="#method-c-clear_reloadable_connections%21">::clear_reloadable_connections!</a></li>
|
73
|
+
|
74
|
+
<li><a href="#method-c-spawn_reconnect">::spawn_reconnect</a></li>
|
75
|
+
|
76
|
+
<li><a href="#method-c-spawn_reconnect">::spawn_reconnect</a></li>
|
77
|
+
|
78
|
+
</ul>
|
79
|
+
</div>
|
80
|
+
|
81
|
+
|
82
|
+
<!-- Included Modules -->
|
83
|
+
|
84
|
+
</div>
|
85
|
+
|
86
|
+
<div id="project-metadata">
|
87
|
+
|
88
|
+
|
89
|
+
<div id="fileindex-section" class="section project-section">
|
90
|
+
<h3 class="section-header">Files</h3>
|
91
|
+
<ul>
|
92
|
+
|
93
|
+
<li class="file"><a href="../Rakefile.html">Rakefile</a></li>
|
94
|
+
|
95
|
+
<li class="file"><a href="../vendor/spawn/CHANGELOG.html">CHANGELOG</a></li>
|
96
|
+
|
97
|
+
<li class="file"><a href="../vendor/spawn/LICENSE.html">LICENSE</a></li>
|
98
|
+
|
99
|
+
</ul>
|
100
|
+
</div>
|
101
|
+
|
102
|
+
|
103
|
+
<div id="classindex-section" class="section project-section">
|
104
|
+
<h3 class="section-header">Class Index
|
105
|
+
<span class="search-toggle"><img src="../images/find.png"
|
106
|
+
height="16" width="16" alt="[+]"
|
107
|
+
title="show/hide quicksearch" /></span></h3>
|
108
|
+
<form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
|
109
|
+
<fieldset>
|
110
|
+
<legend>Quicksearch</legend>
|
111
|
+
<input type="text" name="quicksearch" value=""
|
112
|
+
class="quicksearch-field" />
|
113
|
+
</fieldset>
|
114
|
+
</form>
|
115
|
+
|
116
|
+
<ul class="link-list">
|
117
|
+
|
118
|
+
<li><a href="../JobBoss.html">JobBoss</a></li>
|
119
|
+
|
120
|
+
<li><a href="../JobBoss/Boss.html">JobBoss::Boss</a></li>
|
121
|
+
|
122
|
+
<li><a href="../JobBoss/Config.html">JobBoss::Config</a></li>
|
123
|
+
|
124
|
+
<li><a href="../JobBoss/Job.html">JobBoss::Job</a></li>
|
125
|
+
|
126
|
+
<li><a href="../JobBoss/Queuer.html">JobBoss::Queuer</a></li>
|
127
|
+
|
128
|
+
<li><a href="../PhusionPassenger.html">PhusionPassenger</a></li>
|
129
|
+
|
130
|
+
<li><a href="../PhusionPassenger/Rack.html">PhusionPassenger::Rack</a></li>
|
131
|
+
|
132
|
+
<li><a href="../PhusionPassenger/Rack/RequestHandler.html">PhusionPassenger::Rack::RequestHandler</a></li>
|
133
|
+
|
134
|
+
<li><a href="../PhusionPassenger/Railz.html">PhusionPassenger::Railz</a></li>
|
135
|
+
|
136
|
+
<li><a href="../PhusionPassenger/Railz/RequestHandler.html">PhusionPassenger::Railz::RequestHandler</a></li>
|
137
|
+
|
138
|
+
<li><a href="../Passenger.html">Passenger</a></li>
|
139
|
+
|
140
|
+
<li><a href="../Passenger/Railz.html">Passenger::Railz</a></li>
|
141
|
+
|
142
|
+
<li><a href="../Passenger/Railz/RequestHandler.html">Passenger::Railz::RequestHandler</a></li>
|
143
|
+
|
144
|
+
<li><a href="../ActiveRecord.html">ActiveRecord</a></li>
|
145
|
+
|
146
|
+
<li><a href="../ActiveRecord/Base.html">ActiveRecord::Base</a></li>
|
147
|
+
|
148
|
+
<li><a href="../Mongrel.html">Mongrel</a></li>
|
149
|
+
|
150
|
+
<li><a href="../Mongrel/HttpServer.html">Mongrel::HttpServer</a></li>
|
151
|
+
|
152
|
+
<li><a href="../Spawn.html">Spawn</a></li>
|
153
|
+
|
154
|
+
<li><a href="../Spawn/SpawnId.html">Spawn::SpawnId</a></li>
|
155
|
+
|
156
|
+
<li><a href="../CreateJobs.html">CreateJobs</a></li>
|
157
|
+
|
158
|
+
</ul>
|
159
|
+
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
|
160
|
+
</div>
|
161
|
+
|
162
|
+
|
163
|
+
</div>
|
164
|
+
</div>
|
165
|
+
|
166
|
+
<div id="documentation">
|
167
|
+
<h1 class="class">ActiveRecord::Base</h1>
|
168
|
+
|
169
|
+
<div id="description">
|
170
|
+
<p>
|
171
|
+
see
|
172
|
+
activerecord/lib/active_record/connection_adaptors/abstract/connection_specification.rb
|
173
|
+
</p>
|
174
|
+
|
175
|
+
</div>
|
176
|
+
|
177
|
+
<!-- Constants -->
|
178
|
+
|
179
|
+
|
180
|
+
<!-- Attributes -->
|
181
|
+
|
182
|
+
|
183
|
+
<!-- Methods -->
|
184
|
+
|
185
|
+
<div id="public-class-method-details" class="method-section section">
|
186
|
+
<h3 class="section-header">Public Class Methods</h3>
|
187
|
+
|
188
|
+
|
189
|
+
<div id="clear-reloadable-connections--method" class="method-detail ">
|
190
|
+
<a name="method-c-clear_reloadable_connections%21"></a>
|
191
|
+
|
192
|
+
<div class="method-heading">
|
193
|
+
|
194
|
+
<span class="method-name">clear_reloadable_connections!</span><span
|
195
|
+
class="method-args">()</span>
|
196
|
+
<span class="method-click-advice">click to toggle source</span>
|
197
|
+
|
198
|
+
</div>
|
199
|
+
|
200
|
+
<div class="method-description">
|
201
|
+
|
202
|
+
<p>
|
203
|
+
monkey patch to fix threading problems, see: <a
|
204
|
+
href="http://dev.rubyonrails.org/ticket/7579">dev.rubyonrails.org/ticket/7579</a>
|
205
|
+
</p>
|
206
|
+
|
207
|
+
|
208
|
+
|
209
|
+
<div class="method-source-code"
|
210
|
+
id="clear-reloadable-connections--source">
|
211
|
+
<pre>
|
212
|
+
<span class="ruby-comment cmt"># File vendor/spawn/lib/patches.rb, line 29</span>
|
213
|
+
29: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">clear_reloadable_connections!</span>
|
214
|
+
30: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">@@allow_concurrency</span>
|
215
|
+
31: <span class="ruby-comment cmt"># Hash keyed by thread_id in @@active_connections. Hash of hashes.</span>
|
216
|
+
32: <span class="ruby-identifier">@@active_connections</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">thread_id</span>, <span class="ruby-identifier">conns</span><span class="ruby-operator">|</span>
|
217
|
+
33: <span class="ruby-identifier">conns</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>, <span class="ruby-identifier">conn</span><span class="ruby-operator">|</span>
|
218
|
+
34: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conn</span>.<span class="ruby-identifier">requires_reloading?</span>
|
219
|
+
35: <span class="ruby-identifier">conn</span>.<span class="ruby-identifier">disconnect!</span>
|
220
|
+
36: <span class="ruby-identifier">@@active_connections</span>[<span class="ruby-identifier">thread_id</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">name</span>)
|
221
|
+
37: <span class="ruby-keyword kw">end</span>
|
222
|
+
38: <span class="ruby-keyword kw">end</span>
|
223
|
+
39: <span class="ruby-keyword kw">end</span>
|
224
|
+
40: <span class="ruby-keyword kw">else</span>
|
225
|
+
41: <span class="ruby-comment cmt"># Just one level hash, no concurrency.</span>
|
226
|
+
42: <span class="ruby-identifier">@@active_connections</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span>, <span class="ruby-identifier">conn</span><span class="ruby-operator">|</span>
|
227
|
+
43: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">conn</span>.<span class="ruby-identifier">requires_reloading?</span>
|
228
|
+
44: <span class="ruby-identifier">conn</span>.<span class="ruby-identifier">disconnect!</span>
|
229
|
+
45: <span class="ruby-identifier">@@active_connections</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">name</span>)
|
230
|
+
46: <span class="ruby-keyword kw">end</span>
|
231
|
+
47: <span class="ruby-keyword kw">end</span>
|
232
|
+
48: <span class="ruby-keyword kw">end</span>
|
233
|
+
49: <span class="ruby-keyword kw">end</span></pre>
|
234
|
+
</div>
|
235
|
+
|
236
|
+
</div>
|
237
|
+
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
</div>
|
242
|
+
|
243
|
+
|
244
|
+
<div id="spawn-reconnect-method" class="method-detail ">
|
245
|
+
<a name="method-c-spawn_reconnect"></a>
|
246
|
+
|
247
|
+
<div class="method-heading">
|
248
|
+
|
249
|
+
<span class="method-name">spawn_reconnect</span><span
|
250
|
+
class="method-args">(klass=self)</span>
|
251
|
+
<span class="method-click-advice">click to toggle source</span>
|
252
|
+
|
253
|
+
</div>
|
254
|
+
|
255
|
+
<div class="method-description">
|
256
|
+
|
257
|
+
|
258
|
+
|
259
|
+
|
260
|
+
|
261
|
+
<div class="method-source-code"
|
262
|
+
id="spawn-reconnect-source">
|
263
|
+
<pre>
|
264
|
+
<span class="ruby-comment cmt"># File vendor/spawn/lib/patches.rb, line 14</span>
|
265
|
+
14: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">spawn_reconnect</span>(<span class="ruby-identifier">klass</span>=<span class="ruby-keyword kw">self</span>)
|
266
|
+
15: <span class="ruby-identifier">spec</span> = <span class="ruby-identifier">@@defined_connections</span>[<span class="ruby-identifier">klass</span>.<span class="ruby-identifier">name</span>]
|
267
|
+
16: <span class="ruby-identifier">konn</span> = <span class="ruby-identifier">active_connections</span>[<span class="ruby-identifier">klass</span>.<span class="ruby-identifier">name</span>]
|
268
|
+
17: <span class="ruby-comment cmt"># remove from internal arrays before calling establish_connection so that</span>
|
269
|
+
18: <span class="ruby-comment cmt"># the connection isn't disconnected when it calls AR::Base.remove_connection</span>
|
270
|
+
19: <span class="ruby-identifier">@@defined_connections</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span> <span class="ruby-identifier">value</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">spec</span> }
|
271
|
+
20: <span class="ruby-identifier">active_connections</span>.<span class="ruby-identifier">delete_if</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span> <span class="ruby-identifier">value</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">konn</span> }
|
272
|
+
21: <span class="ruby-identifier">establish_connection</span>(<span class="ruby-identifier">spec</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">spec</span>.<span class="ruby-identifier">config</span> <span class="ruby-operator">:</span> <span class="ruby-keyword kw">nil</span>)
|
273
|
+
22: <span class="ruby-keyword kw">end</span></pre>
|
274
|
+
</div>
|
275
|
+
|
276
|
+
</div>
|
277
|
+
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
</div>
|
282
|
+
|
283
|
+
|
284
|
+
<div id="spawn-reconnect-method" class="method-detail ">
|
285
|
+
<a name="method-c-spawn_reconnect"></a>
|
286
|
+
|
287
|
+
<div class="method-heading">
|
288
|
+
|
289
|
+
<span class="method-name">spawn_reconnect</span><span
|
290
|
+
class="method-args">(klass=self)</span>
|
291
|
+
<span class="method-click-advice">click to toggle source</span>
|
292
|
+
|
293
|
+
</div>
|
294
|
+
|
295
|
+
<div class="method-description">
|
296
|
+
|
297
|
+
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
<div class="method-source-code"
|
302
|
+
id="spawn-reconnect-source">
|
303
|
+
<pre>
|
304
|
+
<span class="ruby-comment cmt"># File vendor/spawn/lib/patches.rb, line 5</span>
|
305
|
+
5: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">spawn_reconnect</span>(<span class="ruby-identifier">klass</span>=<span class="ruby-keyword kw">self</span>)
|
306
|
+
6: <span class="ruby-comment cmt"># keep ancestors' connection_handlers around to avoid them being garbage collected in the forked child</span>
|
307
|
+
7: <span class="ruby-identifier">@@ancestor_connection_handlers</span> <span class="ruby-operator">||=</span> []
|
308
|
+
8: <span class="ruby-identifier">@@ancestor_connection_handlers</span> <span class="ruby-operator"><<</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">connection_handler</span>
|
309
|
+
9: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">connection_handler</span> = <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">ConnectionAdapters</span><span class="ruby-operator">::</span><span class="ruby-constant">ConnectionHandler</span>.<span class="ruby-identifier">new</span>
|
310
|
+
10:
|
311
|
+
11: <span class="ruby-identifier">establish_connection</span>
|
312
|
+
12: <span class="ruby-keyword kw">end</span></pre>
|
313
|
+
</div>
|
314
|
+
|
315
|
+
</div>
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
|
320
|
+
</div>
|
321
|
+
|
322
|
+
|
323
|
+
</div>
|
324
|
+
|
325
|
+
|
326
|
+
</div>
|
327
|
+
|
328
|
+
|
329
|
+
<div id="rdoc-debugging-section-dump" class="debugging-section">
|
330
|
+
|
331
|
+
<p>Disabled; run with --debug to generate this.</p>
|
332
|
+
|
333
|
+
</div>
|
334
|
+
|
335
|
+
<div id="validator-badges">
|
336
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
337
|
+
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
|
338
|
+
Rdoc Generator</a> 1.1.6</small>.</p>
|
339
|
+
</div>
|
340
|
+
|
341
|
+
</body>
|
342
|
+
</html>
|
343
|
+
|
@@ -0,0 +1,185 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
3
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
|
7
|
+
|
8
|
+
<title>Module: ActiveRecord</title>
|
9
|
+
|
10
|
+
<link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
|
11
|
+
|
12
|
+
<script src="./js/jquery.js" type="text/javascript"
|
13
|
+
charset="utf-8"></script>
|
14
|
+
<script src="./js/thickbox-compressed.js" type="text/javascript"
|
15
|
+
charset="utf-8"></script>
|
16
|
+
<script src="./js/quicksearch.js" type="text/javascript"
|
17
|
+
charset="utf-8"></script>
|
18
|
+
<script src="./js/darkfish.js" type="text/javascript"
|
19
|
+
charset="utf-8"></script>
|
20
|
+
|
21
|
+
</head>
|
22
|
+
<body class="module">
|
23
|
+
|
24
|
+
<div id="metadata">
|
25
|
+
<div id="home-metadata">
|
26
|
+
<div id="home-section" class="section">
|
27
|
+
<h3 class="section-header">
|
28
|
+
<a href="./index.html">Home</a>
|
29
|
+
<a href="./index.html#classes">Classes</a>
|
30
|
+
<a href="./index.html#methods">Methods</a>
|
31
|
+
</h3>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="file-metadata">
|
36
|
+
<div id="file-list-section" class="section">
|
37
|
+
<h3 class="section-header">In Files</h3>
|
38
|
+
<div class="section-body">
|
39
|
+
<ul>
|
40
|
+
|
41
|
+
</ul>
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
|
45
|
+
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<div id="class-metadata">
|
49
|
+
|
50
|
+
<!-- Parent Class -->
|
51
|
+
|
52
|
+
|
53
|
+
<!-- Namespace Contents -->
|
54
|
+
|
55
|
+
<div id="namespace-list-section" class="section">
|
56
|
+
<h3 class="section-header">Namespace</h3>
|
57
|
+
<ul class="link-list">
|
58
|
+
|
59
|
+
<li><span class="type">CLASS</span> <a href="ActiveRecord/Base.html">ActiveRecord::Base</a></li>
|
60
|
+
|
61
|
+
</ul>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
|
65
|
+
<!-- Method Quickref -->
|
66
|
+
|
67
|
+
|
68
|
+
<!-- Included Modules -->
|
69
|
+
|
70
|
+
</div>
|
71
|
+
|
72
|
+
<div id="project-metadata">
|
73
|
+
|
74
|
+
|
75
|
+
<div id="fileindex-section" class="section project-section">
|
76
|
+
<h3 class="section-header">Files</h3>
|
77
|
+
<ul>
|
78
|
+
|
79
|
+
<li class="file"><a href="./Rakefile.html">Rakefile</a></li>
|
80
|
+
|
81
|
+
<li class="file"><a href="./vendor/spawn/CHANGELOG.html">CHANGELOG</a></li>
|
82
|
+
|
83
|
+
<li class="file"><a href="./vendor/spawn/LICENSE.html">LICENSE</a></li>
|
84
|
+
|
85
|
+
</ul>
|
86
|
+
</div>
|
87
|
+
|
88
|
+
|
89
|
+
<div id="classindex-section" class="section project-section">
|
90
|
+
<h3 class="section-header">Class Index
|
91
|
+
<span class="search-toggle"><img src="./images/find.png"
|
92
|
+
height="16" width="16" alt="[+]"
|
93
|
+
title="show/hide quicksearch" /></span></h3>
|
94
|
+
<form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
|
95
|
+
<fieldset>
|
96
|
+
<legend>Quicksearch</legend>
|
97
|
+
<input type="text" name="quicksearch" value=""
|
98
|
+
class="quicksearch-field" />
|
99
|
+
</fieldset>
|
100
|
+
</form>
|
101
|
+
|
102
|
+
<ul class="link-list">
|
103
|
+
|
104
|
+
<li><a href="./JobBoss.html">JobBoss</a></li>
|
105
|
+
|
106
|
+
<li><a href="./JobBoss/Boss.html">JobBoss::Boss</a></li>
|
107
|
+
|
108
|
+
<li><a href="./JobBoss/Config.html">JobBoss::Config</a></li>
|
109
|
+
|
110
|
+
<li><a href="./JobBoss/Job.html">JobBoss::Job</a></li>
|
111
|
+
|
112
|
+
<li><a href="./JobBoss/Queuer.html">JobBoss::Queuer</a></li>
|
113
|
+
|
114
|
+
<li><a href="./PhusionPassenger.html">PhusionPassenger</a></li>
|
115
|
+
|
116
|
+
<li><a href="./PhusionPassenger/Rack.html">PhusionPassenger::Rack</a></li>
|
117
|
+
|
118
|
+
<li><a href="./PhusionPassenger/Rack/RequestHandler.html">PhusionPassenger::Rack::RequestHandler</a></li>
|
119
|
+
|
120
|
+
<li><a href="./PhusionPassenger/Railz.html">PhusionPassenger::Railz</a></li>
|
121
|
+
|
122
|
+
<li><a href="./PhusionPassenger/Railz/RequestHandler.html">PhusionPassenger::Railz::RequestHandler</a></li>
|
123
|
+
|
124
|
+
<li><a href="./Passenger.html">Passenger</a></li>
|
125
|
+
|
126
|
+
<li><a href="./Passenger/Railz.html">Passenger::Railz</a></li>
|
127
|
+
|
128
|
+
<li><a href="./Passenger/Railz/RequestHandler.html">Passenger::Railz::RequestHandler</a></li>
|
129
|
+
|
130
|
+
<li><a href="./ActiveRecord.html">ActiveRecord</a></li>
|
131
|
+
|
132
|
+
<li><a href="./ActiveRecord/Base.html">ActiveRecord::Base</a></li>
|
133
|
+
|
134
|
+
<li><a href="./Mongrel.html">Mongrel</a></li>
|
135
|
+
|
136
|
+
<li><a href="./Mongrel/HttpServer.html">Mongrel::HttpServer</a></li>
|
137
|
+
|
138
|
+
<li><a href="./Spawn.html">Spawn</a></li>
|
139
|
+
|
140
|
+
<li><a href="./Spawn/SpawnId.html">Spawn::SpawnId</a></li>
|
141
|
+
|
142
|
+
<li><a href="./CreateJobs.html">CreateJobs</a></li>
|
143
|
+
|
144
|
+
</ul>
|
145
|
+
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
|
146
|
+
</div>
|
147
|
+
|
148
|
+
|
149
|
+
</div>
|
150
|
+
</div>
|
151
|
+
|
152
|
+
<div id="documentation">
|
153
|
+
<h1 class="module">ActiveRecord</h1>
|
154
|
+
|
155
|
+
<div id="description">
|
156
|
+
|
157
|
+
</div>
|
158
|
+
|
159
|
+
<!-- Constants -->
|
160
|
+
|
161
|
+
|
162
|
+
<!-- Attributes -->
|
163
|
+
|
164
|
+
|
165
|
+
<!-- Methods -->
|
166
|
+
|
167
|
+
|
168
|
+
</div>
|
169
|
+
|
170
|
+
|
171
|
+
<div id="rdoc-debugging-section-dump" class="debugging-section">
|
172
|
+
|
173
|
+
<p>Disabled; run with --debug to generate this.</p>
|
174
|
+
|
175
|
+
</div>
|
176
|
+
|
177
|
+
<div id="validator-badges">
|
178
|
+
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
179
|
+
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
|
180
|
+
Rdoc Generator</a> 1.1.6</small>.</p>
|
181
|
+
</div>
|
182
|
+
|
183
|
+
</body>
|
184
|
+
</html>
|
185
|
+
|