mongrel_config 0.2.1 → 0.3
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/Rakefile +3 -4
- data/doc/rdoc/classes/ConfigTool.html +174 -0
- data/doc/rdoc/classes/ConfigTool.src/M000001.html +33 -0
- data/doc/rdoc/classes/ConfigTool.src/M000002.html +28 -0
- data/doc/rdoc/classes/ConfigTool.src/M000003.html +45 -0
- data/doc/rdoc/classes/Configure/Controllers/ClearLogs.html +137 -0
- data/doc/rdoc/classes/Configure/Controllers/ClearLogs.src/M000043.html +21 -0
- data/doc/rdoc/classes/Configure/Controllers/Delete.html +137 -0
- data/doc/rdoc/classes/Configure/Controllers/Delete.src/M000036.html +20 -0
- data/doc/rdoc/classes/Configure/Controllers/Index.html +156 -0
- data/doc/rdoc/classes/Configure/Controllers/Index.src/M000027.html +18 -0
- data/doc/rdoc/classes/Configure/Controllers/Index.src/M000028.html +19 -0
- data/doc/rdoc/classes/Configure/Controllers/Info.html +137 -0
- data/doc/rdoc/classes/Configure/Controllers/Info.src/M000035.html +19 -0
- data/doc/rdoc/classes/Configure/Controllers/Install.html +182 -0
- data/doc/rdoc/classes/Configure/Controllers/Install.src/M000039.html +18 -0
- data/doc/rdoc/classes/Configure/Controllers/Install.src/M000040.html +43 -0
- data/doc/rdoc/classes/Configure/Controllers/Install.src/M000041.html +18 -0
- data/doc/rdoc/classes/Configure/Controllers/Install.src/M000042.html +18 -0
- data/doc/rdoc/classes/Configure/Controllers/Kill.html +137 -0
- data/doc/rdoc/classes/Configure/Controllers/Kill.src/M000029.html +32 -0
- data/doc/rdoc/classes/Configure/Controllers/Logs.html +162 -0
- data/doc/rdoc/classes/Configure/Controllers/Logs.src/M000037.html +19 -0
- data/doc/rdoc/classes/Configure/Controllers/Logs.src/M000038.html +18 -0
- data/doc/rdoc/classes/Configure/Controllers/Start.html +171 -0
- data/doc/rdoc/classes/Configure/Controllers/Start.src/M000032.html +18 -0
- data/doc/rdoc/classes/Configure/Controllers/Start.src/M000033.html +19 -0
- data/doc/rdoc/classes/Configure/Controllers/Start.src/M000034.html +27 -0
- data/doc/rdoc/classes/Configure/Controllers/Stop.html +156 -0
- data/doc/rdoc/classes/Configure/Controllers/Stop.src/M000030.html +18 -0
- data/doc/rdoc/classes/Configure/Controllers/Stop.src/M000031.html +26 -0
- data/doc/rdoc/classes/Configure/Controllers.html +123 -0
- data/doc/rdoc/classes/Configure/Views.html +360 -0
- data/doc/rdoc/classes/Configure/Views.src/M000011.html +24 -0
- data/doc/rdoc/classes/Configure/Views.src/M000012.html +25 -0
- data/doc/rdoc/classes/Configure/Views.src/M000013.html +26 -0
- data/doc/rdoc/classes/Configure/Views.src/M000014.html +20 -0
- data/doc/rdoc/classes/Configure/Views.src/M000015.html +31 -0
- data/doc/rdoc/classes/Configure/Views.src/M000016.html +27 -0
- data/doc/rdoc/classes/Configure/Views.src/M000017.html +32 -0
- data/doc/rdoc/classes/Configure/Views.src/M000018.html +18 -0
- data/doc/rdoc/classes/Configure/Views.src/M000019.html +18 -0
- data/doc/rdoc/classes/Configure/Views.src/M000020.html +29 -0
- data/doc/rdoc/classes/Configure/Views.src/M000021.html +42 -0
- data/doc/rdoc/classes/Configure/Views.src/M000022.html +34 -0
- data/doc/rdoc/classes/Configure/Views.src/M000023.html +25 -0
- data/doc/rdoc/classes/Configure/Views.src/M000024.html +35 -0
- data/doc/rdoc/classes/Configure/Views.src/M000025.html +23 -0
- data/doc/rdoc/classes/Configure/Views.src/M000026.html +20 -0
- data/doc/rdoc/classes/Configure.html +112 -0
- data/doc/rdoc/classes/W32Support.html +258 -0
- data/doc/rdoc/classes/W32Support.src/M000004.html +18 -0
- data/doc/rdoc/classes/W32Support.src/M000005.html +18 -0
- data/doc/rdoc/classes/W32Support.src/M000006.html +33 -0
- data/doc/rdoc/classes/W32Support.src/M000007.html +20 -0
- data/doc/rdoc/classes/W32Support.src/M000008.html +20 -0
- data/doc/rdoc/classes/W32Support.src/M000009.html +18 -0
- data/doc/rdoc/classes/W32Support.src/M000010.html +28 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/COPYING.html +756 -0
- data/doc/rdoc/files/LICENSE.html +756 -0
- data/doc/rdoc/files/README.html +110 -0
- data/doc/rdoc/files/lib/mongrel_config/app_rb.html +110 -0
- data/doc/rdoc/files/lib/mongrel_config/init_rb.html +112 -0
- data/doc/rdoc/files/lib/mongrel_config/win32_app_rb.html +113 -0
- data/doc/rdoc/files/lib/mongrel_config/win32_rb.html +108 -0
- data/doc/rdoc/fr_class_index.html +40 -0
- data/doc/rdoc/fr_file_index.html +33 -0
- data/doc/rdoc/fr_method_index.html +69 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/lib/mongrel_config/init.rb +32 -15
- data/lib/mongrel_config/win32.rb +85 -0
- data/lib/mongrel_config/win32_app.rb +251 -0
- data/resources/index_win32.html +68 -0
- data/resources/style.css +6 -1
- data/test/test_config.rb +48 -2
- data/tools/rakehelp.rb +2 -1
- metadata +95 -4
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
|
|
2
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
3
|
+
<!DOCTYPE html
|
|
4
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
5
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
6
|
+
|
|
7
|
+
<!--
|
|
8
|
+
|
|
9
|
+
Methods
|
|
10
|
+
|
|
11
|
+
-->
|
|
12
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
13
|
+
<head>
|
|
14
|
+
<title>Methods</title>
|
|
15
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
16
|
+
<link rel="stylesheet" href="rdoc-style.css" type="text/css" />
|
|
17
|
+
<base target="docwin" />
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
<div id="index">
|
|
21
|
+
<h1 class="section-bar">Methods</h1>
|
|
22
|
+
<div id="index-entries">
|
|
23
|
+
<a href="classes/Configure/Views.html#M000019">_pid (Configure::Views)</a><br />
|
|
24
|
+
<a href="classes/Configure/Views.html#M000018">_running? (Configure::Views)</a><br />
|
|
25
|
+
<a href="classes/Configure/Views.html#M000026">_running_procs (Configure::Views)</a><br />
|
|
26
|
+
<a href="classes/Configure/Controllers/Install.html#M000042">bad? (Configure::Controllers::Install)</a><br />
|
|
27
|
+
<a href="classes/ConfigTool.html#M000001">configure (ConfigTool)</a><br />
|
|
28
|
+
<a href="classes/W32Support.html#M000010">delete (W32Support)</a><br />
|
|
29
|
+
<a href="classes/W32Support.html#M000005">display (W32Support)</a><br />
|
|
30
|
+
<a href="classes/W32Support.html#M000006">do_and_wait (W32Support)</a><br />
|
|
31
|
+
<a href="classes/Configure/Controllers/Stop.html#M000031">get (Configure::Controllers::Stop)</a><br />
|
|
32
|
+
<a href="classes/Configure/Controllers/Delete.html#M000036">get (Configure::Controllers::Delete)</a><br />
|
|
33
|
+
<a href="classes/Configure/Controllers/Logs.html#M000037">get (Configure::Controllers::Logs)</a><br />
|
|
34
|
+
<a href="classes/Configure/Controllers/Start.html#M000032">get (Configure::Controllers::Start)</a><br />
|
|
35
|
+
<a href="classes/Configure/Controllers/Info.html#M000035">get (Configure::Controllers::Info)</a><br />
|
|
36
|
+
<a href="classes/Configure/Controllers/Stop.html#M000030">get (Configure::Controllers::Stop)</a><br />
|
|
37
|
+
<a href="classes/Configure/Controllers/Kill.html#M000029">get (Configure::Controllers::Kill)</a><br />
|
|
38
|
+
<a href="classes/Configure/Controllers/Index.html#M000028">get (Configure::Controllers::Index)</a><br />
|
|
39
|
+
<a href="classes/Configure/Controllers/Index.html#M000027">get (Configure::Controllers::Index)</a><br />
|
|
40
|
+
<a href="classes/Configure/Controllers/Logs.html#M000038">get (Configure::Controllers::Logs)</a><br />
|
|
41
|
+
<a href="classes/Configure/Controllers/Install.html#M000039">get (Configure::Controllers::Install)</a><br />
|
|
42
|
+
<a href="classes/Configure/Controllers/Start.html#M000034">get (Configure::Controllers::Start)</a><br />
|
|
43
|
+
<a href="classes/Configure/Controllers/ClearLogs.html#M000043">get (Configure::Controllers::ClearLogs)</a><br />
|
|
44
|
+
<a href="classes/Configure/Controllers/Install.html#M000041">good? (Configure::Controllers::Install)</a><br />
|
|
45
|
+
<a href="classes/Configure/Views.html#M000022">info (Configure::Views)</a><br />
|
|
46
|
+
<a href="classes/Configure/Views.html#M000024">install_form (Configure::Views)</a><br />
|
|
47
|
+
<a href="classes/Configure/Views.html#M000025">install_result (Configure::Views)</a><br />
|
|
48
|
+
<a href="classes/Configure/Views.html#M000015">kill (Configure::Views)</a><br />
|
|
49
|
+
<a href="classes/Configure/Views.html#M000020">layout (Configure::Views)</a><br />
|
|
50
|
+
<a href="classes/Configure/Views.html#M000011">layout (Configure::Views)</a><br />
|
|
51
|
+
<a href="classes/W32Support.html#M000004">list (W32Support)</a><br />
|
|
52
|
+
<a href="classes/Configure/Views.html#M000021">list (Configure::Views)</a><br />
|
|
53
|
+
<a href="classes/Configure/Views.html#M000017">logs (Configure::Views)</a><br />
|
|
54
|
+
<a href="classes/Configure/Controllers/Install.html#M000040">post (Configure::Controllers::Install)</a><br />
|
|
55
|
+
<a href="classes/Configure/Controllers/Start.html#M000033">post (Configure::Controllers::Start)</a><br />
|
|
56
|
+
<a href="classes/ConfigTool.html#M000003">run (ConfigTool)</a><br />
|
|
57
|
+
<a href="classes/Configure/Views.html#M000023">service_logs (Configure::Views)</a><br />
|
|
58
|
+
<a href="classes/Configure/Views.html#M000012">show (Configure::Views)</a><br />
|
|
59
|
+
<a href="classes/W32Support.html#M000007">start (W32Support)</a><br />
|
|
60
|
+
<a href="classes/Configure/Views.html#M000013">start (Configure::Views)</a><br />
|
|
61
|
+
<a href="classes/Configure/Views.html#M000014">start_done (Configure::Views)</a><br />
|
|
62
|
+
<a href="classes/W32Support.html#M000009">status (W32Support)</a><br />
|
|
63
|
+
<a href="classes/Configure/Views.html#M000016">stop (Configure::Views)</a><br />
|
|
64
|
+
<a href="classes/W32Support.html#M000008">stop (W32Support)</a><br />
|
|
65
|
+
<a href="classes/ConfigTool.html#M000002">validate (ConfigTool)</a><br />
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</body>
|
|
69
|
+
</html>
|
data/doc/rdoc/index.html
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
+
<!DOCTYPE html
|
|
3
|
+
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
|
4
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
|
5
|
+
|
|
6
|
+
<!--
|
|
7
|
+
|
|
8
|
+
RDoc Documentation
|
|
9
|
+
|
|
10
|
+
-->
|
|
11
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
12
|
+
<head>
|
|
13
|
+
<title>RDoc Documentation</title>
|
|
14
|
+
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
15
|
+
</head>
|
|
16
|
+
<frameset rows="20%, 80%">
|
|
17
|
+
<frameset cols="25%,35%,45%">
|
|
18
|
+
<frame src="fr_file_index.html" title="Files" name="Files" />
|
|
19
|
+
<frame src="fr_class_index.html" name="Classes" />
|
|
20
|
+
<frame src="fr_method_index.html" name="Methods" />
|
|
21
|
+
</frameset>
|
|
22
|
+
<frame src="files/README.html" name="docwin" />
|
|
23
|
+
</frameset>
|
|
24
|
+
</html>
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
|
|
2
|
+
body {
|
|
3
|
+
font-family: Verdana,Arial,Helvetica,sans-serif;
|
|
4
|
+
font-size: 90%;
|
|
5
|
+
margin: 0;
|
|
6
|
+
margin-left: 40px;
|
|
7
|
+
padding: 0;
|
|
8
|
+
background: white;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
|
|
12
|
+
h1 { font-size: 150%; }
|
|
13
|
+
h2,h3,h4 { margin-top: 1em; }
|
|
14
|
+
|
|
15
|
+
a { background: #eef; color: #039; text-decoration: none; }
|
|
16
|
+
a:hover { background: #039; color: #eef; }
|
|
17
|
+
|
|
18
|
+
/* Override the base stylesheet's Anchor inside a table cell */
|
|
19
|
+
td > a {
|
|
20
|
+
background: transparent;
|
|
21
|
+
color: #039;
|
|
22
|
+
text-decoration: none;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* and inside a section title */
|
|
26
|
+
.section-title > a {
|
|
27
|
+
background: transparent;
|
|
28
|
+
color: #eee;
|
|
29
|
+
text-decoration: none;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* === Structural elements =================================== */
|
|
33
|
+
|
|
34
|
+
div#index {
|
|
35
|
+
margin: 0;
|
|
36
|
+
margin-left: -40px;
|
|
37
|
+
padding: 0;
|
|
38
|
+
font-size: 90%;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
div#index a {
|
|
43
|
+
margin-left: 0.7em;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
div#index .section-bar {
|
|
47
|
+
margin-left: 0px;
|
|
48
|
+
padding-left: 0.7em;
|
|
49
|
+
background: #ccc;
|
|
50
|
+
font-size: small;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
div#classHeader, div#fileHeader {
|
|
55
|
+
width: auto;
|
|
56
|
+
color: white;
|
|
57
|
+
padding: 0.5em 1.5em 0.5em 1.5em;
|
|
58
|
+
margin: 0;
|
|
59
|
+
margin-left: -40px;
|
|
60
|
+
border-bottom: 3px solid #006;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
div#classHeader a, div#fileHeader a {
|
|
64
|
+
background: inherit;
|
|
65
|
+
color: white;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
div#classHeader td, div#fileHeader td {
|
|
69
|
+
background: inherit;
|
|
70
|
+
color: white;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
div#fileHeader {
|
|
75
|
+
background: #057;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
div#classHeader {
|
|
79
|
+
background: #048;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
.class-name-in-header {
|
|
84
|
+
font-size: 180%;
|
|
85
|
+
font-weight: bold;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
div#bodyContent {
|
|
90
|
+
padding: 0 1.5em 0 1.5em;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
div#description {
|
|
94
|
+
padding: 0.5em 1.5em;
|
|
95
|
+
background: #efefef;
|
|
96
|
+
border: 1px dotted #999;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
div#description h1,h2,h3,h4,h5,h6 {
|
|
100
|
+
color: #125;;
|
|
101
|
+
background: transparent;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
div#validator-badges {
|
|
105
|
+
text-align: center;
|
|
106
|
+
}
|
|
107
|
+
div#validator-badges img { border: 0; }
|
|
108
|
+
|
|
109
|
+
div#copyright {
|
|
110
|
+
color: #333;
|
|
111
|
+
background: #efefef;
|
|
112
|
+
font: 0.75em sans-serif;
|
|
113
|
+
margin-top: 5em;
|
|
114
|
+
margin-bottom: 0;
|
|
115
|
+
padding: 0.5em 2em;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
/* === Classes =================================== */
|
|
120
|
+
|
|
121
|
+
table.header-table {
|
|
122
|
+
color: white;
|
|
123
|
+
font-size: small;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.type-note {
|
|
127
|
+
font-size: small;
|
|
128
|
+
color: #DEDEDE;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.xxsection-bar {
|
|
132
|
+
background: #eee;
|
|
133
|
+
color: #333;
|
|
134
|
+
padding: 3px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.section-bar {
|
|
138
|
+
color: #333;
|
|
139
|
+
border-bottom: 1px solid #999;
|
|
140
|
+
margin-left: -20px;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
.section-title {
|
|
145
|
+
background: #79a;
|
|
146
|
+
color: #eee;
|
|
147
|
+
padding: 3px;
|
|
148
|
+
margin-top: 2em;
|
|
149
|
+
margin-left: -30px;
|
|
150
|
+
border: 1px solid #999;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.top-aligned-row { vertical-align: top }
|
|
154
|
+
.bottom-aligned-row { vertical-align: bottom }
|
|
155
|
+
|
|
156
|
+
/* --- Context section classes ----------------------- */
|
|
157
|
+
|
|
158
|
+
.context-row { }
|
|
159
|
+
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
|
|
160
|
+
.context-item-value { font-size: small; color: #448; }
|
|
161
|
+
.context-item-desc { color: #333; padding-left: 2em; }
|
|
162
|
+
|
|
163
|
+
/* --- Method classes -------------------------- */
|
|
164
|
+
.method-detail {
|
|
165
|
+
background: #efefef;
|
|
166
|
+
padding: 0;
|
|
167
|
+
margin-top: 0.5em;
|
|
168
|
+
margin-bottom: 1em;
|
|
169
|
+
border: 1px dotted #ccc;
|
|
170
|
+
}
|
|
171
|
+
.method-heading {
|
|
172
|
+
color: black;
|
|
173
|
+
background: #ccc;
|
|
174
|
+
border-bottom: 1px solid #666;
|
|
175
|
+
padding: 0.2em 0.5em 0 0.5em;
|
|
176
|
+
}
|
|
177
|
+
.method-signature { color: black; background: inherit; }
|
|
178
|
+
.method-name { font-weight: bold; }
|
|
179
|
+
.method-args { font-style: italic; }
|
|
180
|
+
.method-description { padding: 0 0.5em 0 0.5em; }
|
|
181
|
+
|
|
182
|
+
/* --- Source code sections -------------------- */
|
|
183
|
+
|
|
184
|
+
a.source-toggle { font-size: 90%; }
|
|
185
|
+
div.method-source-code {
|
|
186
|
+
background: #262626;
|
|
187
|
+
color: #ffdead;
|
|
188
|
+
margin: 1em;
|
|
189
|
+
padding: 0.5em;
|
|
190
|
+
border: 1px dashed #999;
|
|
191
|
+
overflow: hidden;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
195
|
+
|
|
196
|
+
/* --- Ruby keyword styles --------------------- */
|
|
197
|
+
|
|
198
|
+
.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
|
|
199
|
+
|
|
200
|
+
.ruby-constant { color: #7fffd4; background: transparent; }
|
|
201
|
+
.ruby-keyword { color: #00ffff; background: transparent; }
|
|
202
|
+
.ruby-ivar { color: #eedd82; background: transparent; }
|
|
203
|
+
.ruby-operator { color: #00ffee; background: transparent; }
|
|
204
|
+
.ruby-identifier { color: #ffdead; background: transparent; }
|
|
205
|
+
.ruby-node { color: #ffa07a; background: transparent; }
|
|
206
|
+
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
|
|
207
|
+
.ruby-regexp { color: #ffa07a; background: transparent; }
|
|
208
|
+
.ruby-value { color: #7fffd4; background: transparent; }
|
data/lib/mongrel_config/init.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'rubygems'
|
|
1
2
|
require 'gem_plugin'
|
|
2
3
|
require 'mongrel'
|
|
3
4
|
|
|
@@ -6,23 +7,34 @@ class ConfigTool < GemPlugin::Plugin "/commands"
|
|
|
6
7
|
include Mongrel::Command::Base
|
|
7
8
|
|
|
8
9
|
def configure
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
if RUBY_PLATFORM =~ /mswin/
|
|
11
|
+
options [
|
|
12
|
+
['-h', '--host ADDR', "Host to bind to for server", :@host, "0.0.0.0"],
|
|
13
|
+
['-p', '--port NUMBER', "Port to bind to", :@port, "3001"],
|
|
14
|
+
['-u', '--uri URI', "Where to put your config tool", :@uri, "/config"],
|
|
15
|
+
['-R', '--mongrel PATH', "Path to mongrel_rails_service", :@mongrel_script, "c:\\ruby\\bin\\mongrel_rails_service"]
|
|
16
|
+
]
|
|
17
|
+
else
|
|
18
|
+
options [
|
|
19
|
+
['-c', '--chdir PATH', "Change to dir before starting (will be expanded)", :@cwd, Dir.pwd],
|
|
20
|
+
['-P', '--pid FILE', "Where to write the PID", :@pid_file, "log/mongrel.pid"],
|
|
21
|
+
['-h', '--host ADDR', "Host to bind to for server", :@host, "0.0.0.0"],
|
|
22
|
+
['-p', '--port NUMBER', "Port to bind to", :@port, "3001"],
|
|
23
|
+
['-u', '--uri URI', "Where to put your config tool", :@uri, "/config"]
|
|
24
|
+
]
|
|
25
|
+
end
|
|
16
26
|
end
|
|
17
27
|
|
|
18
28
|
def validate
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
valid?(@uri, "Must give a uri")
|
|
30
|
+
valid?(@port && @port.to_i > 0, "Must give a valid port")
|
|
31
|
+
valid?(@host, "Host IP to bind must be given")
|
|
32
|
+
|
|
33
|
+
if RUBY_PLATFORM !~ /mswin/
|
|
34
|
+
valid_dir? @cwd, "Cannot change to a directory that doesn't exist"
|
|
35
|
+
Dir.chdir @cwd
|
|
36
|
+
valid_dir? "log", "Log directory does not exist"
|
|
37
|
+
end
|
|
26
38
|
|
|
27
39
|
return @valid
|
|
28
40
|
end
|
|
@@ -30,7 +42,12 @@ class ConfigTool < GemPlugin::Plugin "/commands"
|
|
|
30
42
|
|
|
31
43
|
def run
|
|
32
44
|
# must require this here since rails and camping don't like eachother
|
|
33
|
-
|
|
45
|
+
if RUBY_PLATFORM =~ /mswin/
|
|
46
|
+
require 'mongrel_config/win32_app'
|
|
47
|
+
$mongrel_rails_service = @mongrel_script
|
|
48
|
+
else
|
|
49
|
+
require 'mongrel_config/app'
|
|
50
|
+
end
|
|
34
51
|
|
|
35
52
|
resources = GemPlugin::Manager.instance.resource "mongrel_config", "/"
|
|
36
53
|
$PID_FILE = @pid_file
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require 'win32/service'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# Simply abstracts the common stuff that the config tool needs to do
|
|
5
|
+
# when dealing with Win32. It is a very thin wrapper which may expand
|
|
6
|
+
# later.
|
|
7
|
+
module W32Support
|
|
8
|
+
|
|
9
|
+
# Lists all of the services that have "mongrel" in the binary_path_name
|
|
10
|
+
# of the service. This detects the mongrel services.
|
|
11
|
+
def W32Support.list
|
|
12
|
+
Win32::Service.services.select {|s| s.binary_path_name =~ /mongrel/ }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Just gets the display name of the service.
|
|
16
|
+
def W32Support.display(name)
|
|
17
|
+
Win32::Service.getdisplayname(name)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Performs one operations (like :start or :start) which need
|
|
21
|
+
# to be "monitored" until they're done. The wait_for parameter
|
|
22
|
+
# should be a regex for the content of the status like /running/
|
|
23
|
+
# or /stopped/
|
|
24
|
+
def W32Support.do_and_wait(service_name, operation, wait_for)
|
|
25
|
+
status = W32Support.status(service_name)
|
|
26
|
+
if status =~ wait_for
|
|
27
|
+
# already running call the block once and leave
|
|
28
|
+
yield status
|
|
29
|
+
else
|
|
30
|
+
# start trying to start it
|
|
31
|
+
Win32::Service.send(operation, service_name)
|
|
32
|
+
status = W32Support.status(service_name)
|
|
33
|
+
while status !~ wait_for
|
|
34
|
+
yield status
|
|
35
|
+
status = W32Support.status(service_name)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# do one last yield so they know it started
|
|
39
|
+
yield status
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Starts the requested service and calls a passed in block
|
|
44
|
+
# until the service is done. You should sleep for a short
|
|
45
|
+
# period until it's done or there's an exception.
|
|
46
|
+
def W32Support.start(service_name)
|
|
47
|
+
W32Support.do_and_wait(service_name, :start, /running/) do |status|
|
|
48
|
+
yield status
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Stops the service. Just like W32Support.start is will call
|
|
54
|
+
# a block while it checks for the service to actually stop.
|
|
55
|
+
def W32Support.stop(service_name)
|
|
56
|
+
W32Support.do_and_wait(service_name, :stop, /stopped/) do |status|
|
|
57
|
+
yield status
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# Returns the current_state field of the service.
|
|
63
|
+
def W32Support.status(service_name)
|
|
64
|
+
Win32::Service.status(service_name).current_state
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# Deletes the service from the system. It first tries to stop
|
|
69
|
+
# the service, and if you pass in a block it will call it while
|
|
70
|
+
# the service is being stopped.
|
|
71
|
+
def W32Support.delete(service_name)
|
|
72
|
+
begin
|
|
73
|
+
W32Support.stop(service_name) do |status|
|
|
74
|
+
yield status if block_given?
|
|
75
|
+
end
|
|
76
|
+
rescue
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
begin
|
|
80
|
+
Win32::Service.delete(service_name)
|
|
81
|
+
rescue
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
end
|