mongrel2 0.10.0 → 0.11.0
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.tar.gz.sig +0 -0
- data/ChangeLog +15 -2
- data/DSL.rdoc +300 -0
- data/History.rdoc +8 -0
- data/Manifest.txt +1 -0
- data/Rakefile +1 -1
- data/bin/m2sh.rb +2 -2
- data/examples/config.rb +19 -37
- data/lib/mongrel2.rb +2 -2
- data/lib/mongrel2/config.rb +1 -1
- data/lib/mongrel2/config/dsl.rb +40 -80
- data/lib/mongrel2/config/server.rb +3 -2
- data/lib/mongrel2/httprequest.rb +12 -0
- data/spec/mongrel2/config/dsl_spec.rb +15 -0
- data/spec/mongrel2/config_spec.rb +2 -1
- data/spec/mongrel2/httprequest_spec.rb +10 -0
- metadata +38 -36
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/ChangeLog
CHANGED
@@ -1,8 +1,21 @@
|
|
1
|
+
2012-02-10 Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
* examples/config.rb, lib/mongrel2/config/dsl.rb:
|
4
|
+
Start work on detailed docs for the config DSL
|
5
|
+
[fd35a1c88881] [tip]
|
6
|
+
|
1
7
|
2012-02-06 Michael Granger <ged@FaerieMUD.org>
|
2
8
|
|
9
|
+
* .rvm.gems, .rvmrc, .tm_properties, bin/m2sh.rb, examples/config.rb,
|
10
|
+
lib/mongrel2/config.rb, lib/mongrel2/config/dsl.rb,
|
11
|
+
lib/mongrel2/config/server.rb, spec/mongrel2/config/dsl_spec.rb,
|
12
|
+
spec/mongrel2/config_spec.rb:
|
13
|
+
Make the DSL declarations destructive.
|
14
|
+
[8c065a2dcebc]
|
15
|
+
|
3
16
|
* .hgtags:
|
4
17
|
Added tag v0.10.0 for changeset 1e9885cbcafd
|
5
|
-
[d3f06f6344ad]
|
18
|
+
[d3f06f6344ad]
|
6
19
|
|
7
20
|
* .hgsigs:
|
8
21
|
Added signature for changeset 948877fd6c9d
|
@@ -29,7 +42,7 @@
|
|
29
42
|
spec/mongrel2/config/filter_spec.rb,
|
30
43
|
spec/mongrel2/config/route_spec.rb:
|
31
44
|
Updating config database schema/classes for Mongrel 1.8.
|
32
|
-
[6d2608b23873]
|
45
|
+
[6d2608b23873]
|
33
46
|
|
34
47
|
* examples/config.rb:
|
35
48
|
Move the example server back to port 8113
|
data/DSL.rdoc
ADDED
@@ -0,0 +1,300 @@
|
|
1
|
+
= The Mongrel2 Config DSL
|
2
|
+
|
3
|
+
The Mongrel2::Config::DSL module is a mixin that will add functions to your
|
4
|
+
namespace that can create and replace configuration items in the current
|
5
|
+
Mongrel2 config database.
|
6
|
+
|
7
|
+
If you're creating a config that will be run standalone, you'll need to
|
8
|
+
point the config classes to the right database before using the DSL:
|
9
|
+
|
10
|
+
#!/usr/bin/env ruby
|
11
|
+
|
12
|
+
require 'mongrel2'
|
13
|
+
require 'mongrel2/config'
|
14
|
+
require 'mongrel2/config/dsl'
|
15
|
+
|
16
|
+
Mongrel2::Config.configure( configdb: 'myconfig.sqlite' )
|
17
|
+
include Mongrel2::Config::DSL
|
18
|
+
|
19
|
+
server 'myserver' do
|
20
|
+
# ...
|
21
|
+
end
|
22
|
+
|
23
|
+
If you're creating a config to be loaded via m2sh.rb, you don't need any of
|
24
|
+
that, as m2sh.rb provides its own prelude before loading the config.
|
25
|
+
|
26
|
+
== DSL Syntax
|
27
|
+
|
28
|
+
There is basically one directive for each configuration item, and the layout follows the basic structure described in the {Mongrel2 manual}[http://mongrel2.org/static/book-finalch4.html#x6-260003.4].
|
29
|
+
|
30
|
+
|
31
|
+
=== server
|
32
|
+
|
33
|
+
server <uuid> { <server config block> }
|
34
|
+
|
35
|
+
This creates or replaces the server associated with the specified +uuid+. The
|
36
|
+
<tt>server config block</tt> has directives for each of the server attributes,
|
37
|
+
each of which corresponds to one of the columns in the configuration database's
|
38
|
+
+server+ table (descriptions largely borrowed from the
|
39
|
+
manual[http://mongrel2.org/static/book-finalch4.html#x6-270003.4.1]):
|
40
|
+
|
41
|
+
[chroot +directory+] The directory that Mongrel2 should chroot to at startup.
|
42
|
+
Defaults to <tt>/var/www</tt>.
|
43
|
+
[access_log +path+] The path to the access log file relative to the +chroot+.
|
44
|
+
Usually starts with a ‘/’. Defaults to
|
45
|
+
<tt>/logs/access.log</tt>.
|
46
|
+
[error_log +path+] The error log file, just like +access_log+. Defaults to
|
47
|
+
<tt>/logs/error.log</tt>.
|
48
|
+
[pid_file +path+] The path to the PID file, relative to the +chroot+.
|
49
|
+
Defaults to <tt>/run/mongrel2.pid</tt>.
|
50
|
+
[default_host +name+] Which +host+ in the server to use as the default if
|
51
|
+
the +Host+ header doesn't match any host's +matching+
|
52
|
+
attribute. Defaults to <tt>localhost</tt>.
|
53
|
+
[bind_addr +ipaddr+] The IP address to bind to; default is <tt>0.0.0.0</tt>.
|
54
|
+
[port +int+] The port the server should listen on for new connections;
|
55
|
+
defaults to <tt>8888</tt>.
|
56
|
+
|
57
|
+
The server will be saved immediately upon exiting the block, and will return the
|
58
|
+
saved Mongrel2::Config::Server object.
|
59
|
+
|
60
|
+
|
61
|
+
=== host
|
62
|
+
|
63
|
+
host <name> { <host config block> }
|
64
|
+
|
65
|
+
This creates or replaces the named Host within a +server+ block. Inside the
|
66
|
+
<tt>host config block</tt>, there are directives for further configuring the
|
67
|
+
Host, adding Routes, and setting up Handler, Proxy, and Directory targets
|
68
|
+
for Routes.
|
69
|
+
|
70
|
+
[matching +pattern+] This is a pattern that’s used to match incoming
|
71
|
+
<tt>Host</tt> headers for routing purposes.
|
72
|
+
[maintenance +boolean+] This is a (currently unused) setting that will display
|
73
|
+
a "down for maintenance" page.
|
74
|
+
|
75
|
+
The rest of the block will likely be concerned with setting up the routes for
|
76
|
+
the host using the +route+, +handler+, +directory+, and +proxy+ directives, e.g.:
|
77
|
+
|
78
|
+
host 'main' do
|
79
|
+
matching 'example.com'
|
80
|
+
maintenance false
|
81
|
+
|
82
|
+
# Hello world application
|
83
|
+
route '/hello', handler('tcp://127.0.0.1:9999', 'helloworld-handler')
|
84
|
+
# Contact form handler
|
85
|
+
route '/contact', handler('tcp://127.0.0.1:9995', 'contact-form')
|
86
|
+
|
87
|
+
# reverse proxy for a non-mongrel application listening on 8080
|
88
|
+
route '/api', proxy('127.0.0.1', 8080)
|
89
|
+
end
|
90
|
+
# => #<Mongrel2::Config::Host ...>
|
91
|
+
|
92
|
+
Since the block is just a Ruby block, and each directive returns the configured
|
93
|
+
object, you can use conditionals, assign targets to variables to be reused later,
|
94
|
+
etc:
|
95
|
+
|
96
|
+
require 'socket'
|
97
|
+
|
98
|
+
host 'test' do
|
99
|
+
matching 'testing.example.com'
|
100
|
+
|
101
|
+
# Decide which address to listen to, and which app to use based on which
|
102
|
+
# host the config is running on.
|
103
|
+
testhandler =
|
104
|
+
if Socket.gethostname.include?( 'example.com' )
|
105
|
+
handler 'tcp://0.0.0.0:31218', 'ci-builder'
|
106
|
+
else
|
107
|
+
handler 'tcp://127.0.0.1', 'unittest-builder'
|
108
|
+
end
|
109
|
+
|
110
|
+
route '', testhandler
|
111
|
+
end
|
112
|
+
|
113
|
+
=== route
|
114
|
+
|
115
|
+
route <pattern>, <target>, [<opts>]
|
116
|
+
|
117
|
+
Create a route in the current host that will match the given +pattern+ and
|
118
|
+
pass the request to the specified +target+, which should be a Handler, a
|
119
|
+
Directory, or a Proxy.
|
120
|
+
|
121
|
+
The only current option is +reversed+, which (if +true+) means that the pattern
|
122
|
+
is bound to the end rather than the beginning of the path.
|
123
|
+
|
124
|
+
It returns the configured Route object.
|
125
|
+
|
126
|
+
route '/demo', handler('tcp://localhost:9400', 'demo-handler')
|
127
|
+
# => #<Mongrel2::Config::Route ...>
|
128
|
+
route '.css', directory('/public/css', 'base.css', 'text/css'), reverse: true
|
129
|
+
|
130
|
+
# Use the same image-factory handler for each image type
|
131
|
+
image_handler = handler('tcp://localhost:9300', 'image-factory')
|
132
|
+
route '.jpg', image_handler, reverse: true
|
133
|
+
route '.gif', image_handler, reverse: true
|
134
|
+
route '.png', image_handler, reverse: true
|
135
|
+
route '.ico', image_handler, reverse: true
|
136
|
+
|
137
|
+
=== handler
|
138
|
+
|
139
|
+
handler <send_spec>, <send_ident>, [<recv_spec>[, <recv_ident>]], [<options>]
|
140
|
+
|
141
|
+
Create a Handler that will send and receive on +send_spec+ and +recv_spec+ 0mq
|
142
|
+
sockets, respectively. The application's +send_ident+ is an identifier (usually
|
143
|
+
a UUID) that will be used to register the send socket so messages persist
|
144
|
+
through crashes.
|
145
|
+
|
146
|
+
If no +recv_spec+ is given, the port immediately below the +send_spec+ is used.
|
147
|
+
|
148
|
+
The +recv_ident+ is another UUID if you want the receive socket to subscribe to
|
149
|
+
its messages. Handlers properly mention the send_ident on all returned
|
150
|
+
messages, so you should either set this to nothing and don’t subscribe, or set
|
151
|
+
it to the same as +send_ident+.
|
152
|
+
|
153
|
+
Valid +options+ for Handlers are:
|
154
|
+
|
155
|
+
[raw_payload +boolean+] ?
|
156
|
+
[protocol +name+] The protocol used to communicate with the handler. Should
|
157
|
+
be either 'tnetstring' or 'json' (the default).
|
158
|
+
|
159
|
+
As with the other directives, +handler+ returns the newly-saved Handler object.
|
160
|
+
This means that you can either assign it to a variable for later inclusion in
|
161
|
+
one or more Route declarations, or you can define it in the <tt>route</tt> itself:
|
162
|
+
|
163
|
+
route '/gravatar/:email', handler('tcp://localhost:1480', 'gravatar-service')
|
164
|
+
# => #<Mongrel2::Config::Route ...>
|
165
|
+
|
166
|
+
See the documentation for @route@ for more examples of this.
|
167
|
+
|
168
|
+
|
169
|
+
=== directory
|
170
|
+
|
171
|
+
directory <base>, [<index_file>[, <default_ctype>[, <options>]]]
|
172
|
+
|
173
|
+
Create a Dir target for a route that will serve static content from the
|
174
|
+
specified +base+ directory. Returns the saved Dir object.
|
175
|
+
|
176
|
+
There aren't currently any supported +options+, but the Mongrel2 manual
|
177
|
+
says that "eventually you’ll be able to tweak more and more of the
|
178
|
+
settings to control how Dirs work."
|
179
|
+
|
180
|
+
|
181
|
+
=== proxy
|
182
|
+
|
183
|
+
proxy <addr>[, <port>]
|
184
|
+
|
185
|
+
Create a Proxy target for a route that will proxy another server listening
|
186
|
+
on the given +addr+ and +port+. If not specified, +port+ defaults to
|
187
|
+
<tt>80</tt>. Returns the saved Proxy object.
|
188
|
+
|
189
|
+
|
190
|
+
=== filter
|
191
|
+
|
192
|
+
filter <path>[, <settings>]
|
193
|
+
|
194
|
+
Set up a Filter[http://mongrel2.org/static/book-finalch6.html#x8-840005.8]
|
195
|
+
for the containing Server by loading the object from the specified +path+
|
196
|
+
and passing it the specified +options+ as a
|
197
|
+
TNetstring[http://tnetstrings.org/].
|
198
|
+
|
199
|
+
|
200
|
+
=== setting/settings
|
201
|
+
|
202
|
+
setting <name>, <value>
|
203
|
+
settings <name1> => <value1>[, <name2> => <value2>, ...]
|
204
|
+
|
205
|
+
Set one or more of Mongrel2's internal settings. See the
|
206
|
+
{tweakable expert settings section}[http://mongrel2.org/static/book-finalch4.html#x6-410003.10]
|
207
|
+
of the manual for valid values and more details on what these do.
|
208
|
+
|
209
|
+
An example (from the manual):
|
210
|
+
|
211
|
+
settings "zeromq.threads" => 1,
|
212
|
+
"upload.temp_store" => "/home/zedshaw/projects/mongrel2/tmp/upload.XXXXXX",
|
213
|
+
"upload.temp_store_mode" => "0666"
|
214
|
+
# => [ #<Mongrel2::Config::Setting ...>, #<Mongrel2::Config::Setting ...>, ... ]
|
215
|
+
|
216
|
+
=== mimetype/mimetypes
|
217
|
+
|
218
|
+
mimetype <extension>, <mimetype>
|
219
|
+
mimetypes <extension1> => <mimetype1>[, <extension2> => <mimetype2>]
|
220
|
+
|
221
|
+
Map one or more file +extension+s to a +mimetype+.
|
222
|
+
|
223
|
+
An example:
|
224
|
+
|
225
|
+
mimetypes '.ttf' => 'application/x-font-truetype',
|
226
|
+
'.otf' => 'application/x-font-opentype'
|
227
|
+
# => [#<Mongrel2::Config::Mimetype ...>, ... ]
|
228
|
+
|
229
|
+
|
230
|
+
== Example
|
231
|
+
|
232
|
+
This is the mongrel2.org config re-expressed in the Ruby DSL:
|
233
|
+
|
234
|
+
# the server to run them all
|
235
|
+
server '2f62bd5-9e59-49cd-993c-3b6013c28f05' do
|
236
|
+
|
237
|
+
access_log "/logs/access.log"
|
238
|
+
error_log "/logs/error.log"
|
239
|
+
chroot "./"
|
240
|
+
pid_file "/run/mongrel2.pid"
|
241
|
+
default_host "mongrel2.org"
|
242
|
+
name "main"
|
243
|
+
port 6767
|
244
|
+
|
245
|
+
# your main host
|
246
|
+
host "mongrel2.org" do
|
247
|
+
|
248
|
+
# a sample of doing some handlers
|
249
|
+
route '@chat', handler(
|
250
|
+
'tcp://127.0.0.1:9999',
|
251
|
+
'54c6755b-9628-40a4-9a2d-cc82a816345e',
|
252
|
+
'tcp://127.0.0.1:9998'
|
253
|
+
)
|
254
|
+
|
255
|
+
route '/handlertest', handler(
|
256
|
+
'tcp://127.0.0.1:9997',
|
257
|
+
'34f9ceee-cd52-4b7f-b197-88bf2f0ec378',
|
258
|
+
'tcp://127.0.0.1:9996'
|
259
|
+
)
|
260
|
+
|
261
|
+
# a sample proxy route
|
262
|
+
web_app_proxy = proxy( '127.0.0.1', 8080 )
|
263
|
+
|
264
|
+
route '/chat/', web_app_proxy
|
265
|
+
route '/', web_app_proxy
|
266
|
+
|
267
|
+
# here's a sample directory
|
268
|
+
test_directory = directory(
|
269
|
+
'tests/',
|
270
|
+
:index_file => 'index.html',
|
271
|
+
:default_ctype => 'text/plain'
|
272
|
+
)
|
273
|
+
|
274
|
+
route '/tests/', test_directory
|
275
|
+
route '/testsmulti/(.*.json)', test_directory
|
276
|
+
|
277
|
+
chat_demo_dir = directory(
|
278
|
+
'examples/chat/static/',
|
279
|
+
:index_file => 'index.html',
|
280
|
+
:default_ctype => 'text/plain'
|
281
|
+
)
|
282
|
+
|
283
|
+
route '/chatdemo/', chat_demo_dir
|
284
|
+
route '/static/', chat_demo_dir
|
285
|
+
|
286
|
+
route '/mp3stream', handler(
|
287
|
+
'tcp://127.0.0.1:9995',
|
288
|
+
'53f9f1d1-1116-4751-b6ff-4fbe3e43d142',
|
289
|
+
'tcp://127.0.0.1:9994'
|
290
|
+
)
|
291
|
+
end
|
292
|
+
|
293
|
+
end
|
294
|
+
|
295
|
+
settings(
|
296
|
+
"zeromq.threads" => 1,
|
297
|
+
"upload.temp_store" => "/home/zedshaw/projects/mongrel2/tmp/upload.XXXXXX",
|
298
|
+
"upload.temp_store_mode" => "0666"
|
299
|
+
)
|
300
|
+
|
data/History.rdoc
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== v0.11.0 [2012-02-15] Michael Granger <ged@FaerieMUD.org>
|
2
|
+
|
3
|
+
- Make the DSL declarations replace existing records.
|
4
|
+
- Flesh out the documentation for the DSL
|
5
|
+
- Provide convenience methods for resetting an HTTP request's
|
6
|
+
Content-type and Content-encoding headers.
|
7
|
+
|
8
|
+
|
1
9
|
== v0.10.0 [2012-02-06] Michael Granger <ged@FaerieMUD.org>
|
2
10
|
|
3
11
|
This release includes updates for Mongrel 1.8 and finishes up the m2sh.rb tool.
|
data/Manifest.txt
CHANGED
data/Rakefile
CHANGED
@@ -20,7 +20,7 @@ Hoe.plugins.delete :rubyforge
|
|
20
20
|
hoespec = Hoe.spec 'mongrel2' do
|
21
21
|
self.readme_file = 'README.rdoc'
|
22
22
|
self.history_file = 'History.rdoc'
|
23
|
-
self.extra_rdoc_files
|
23
|
+
self.extra_rdoc_files = Rake::FileList[ '*.rdoc' ]
|
24
24
|
self.spec_extras[:rdoc_options] = ['-t', 'Ruby-Mongrel2']
|
25
25
|
|
26
26
|
self.developer 'Michael Granger', 'ged@FaerieMUD.org'
|
data/bin/m2sh.rb
CHANGED
@@ -293,7 +293,7 @@ class Mongrel2::M2SHCommand
|
|
293
293
|
|
294
294
|
header "Loading config from #{configfile}"
|
295
295
|
source = File.read( configfile )
|
296
|
-
|
296
|
+
|
297
297
|
runspace.module_eval( source, configfile, 0 )
|
298
298
|
end
|
299
299
|
help :load, "Overwrite the config database with the values from the speciifed CONFIGFILE."
|
@@ -406,7 +406,7 @@ class Mongrel2::M2SHCommand
|
|
406
406
|
def servers_command( * )
|
407
407
|
header 'SERVERS:'
|
408
408
|
Mongrel2::Config.servers.each do |server|
|
409
|
-
message "%s
|
409
|
+
message "%s [%s]: %s" % [
|
410
410
|
self.prompt.color( server.name, :key ),
|
411
411
|
server.default_host,
|
412
412
|
server.uuid,
|
data/examples/config.rb
CHANGED
@@ -1,52 +1,37 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# The Mongrel config used by the examples.
|
3
|
+
# The Mongrel config used by the examples. Load it with:
|
4
|
+
#
|
5
|
+
# m2sh.rb -c examples.sqlite load examples/config.rb
|
6
|
+
#
|
4
7
|
|
5
|
-
|
6
|
-
|
7
|
-
basedir = Pathname( __FILE__ ).dirname.parent
|
8
|
-
libdir = basedir + 'lib'
|
9
|
-
|
10
|
-
$LOAD_PATH.unshift( libdir.to_s )
|
11
|
-
}
|
12
|
-
|
13
|
-
require 'rubygems'
|
14
|
-
require 'fileutils'
|
15
|
-
require 'mongrel2'
|
16
|
-
require 'mongrel2/config'
|
17
|
-
|
18
|
-
include FileUtils::Verbose
|
19
|
-
|
20
|
-
Mongrel2.log.level = Logger::INFO
|
21
|
-
Mongrel2::Config.configure( :configdb => 'examples.sqlite' )
|
22
|
-
include Mongrel2::Config::DSL
|
8
|
+
# samples server
|
9
|
+
server '34D8E57C-3E91-4F24-9BBE-0B53C1827CB4' do
|
23
10
|
|
24
|
-
|
11
|
+
name 'main'
|
12
|
+
default_host 'www.example.com'
|
25
13
|
|
26
|
-
|
27
|
-
|
14
|
+
access_log '/logs/access.log'
|
15
|
+
error_log '/logs/error.log'
|
16
|
+
chroot '/var/mongrel2'
|
17
|
+
pid_file '/run/mongrel2.pid'
|
28
18
|
|
29
|
-
|
30
|
-
|
31
|
-
chroot "/var/mongrel2"
|
32
|
-
pid_file "/run/mongrel2.pid"
|
33
|
-
default_host "localhost"
|
34
|
-
name "main"
|
35
|
-
port 8113
|
19
|
+
bind_addr '0.0.0.0'
|
20
|
+
port 8113
|
36
21
|
|
37
|
-
# your main host
|
38
|
-
host
|
22
|
+
# your main host
|
23
|
+
host 'www.example.com' do
|
39
24
|
|
40
25
|
route '/', directory( 'data/mongrel2/', 'bootstrap.html', 'text/html' )
|
41
26
|
route '/source', directory( 'examples/', 'README.txt', 'text/plain' )
|
42
27
|
|
43
28
|
# Handlers
|
44
|
-
route '/hello', handler( 'tcp://127.0.0.1:9999', 'helloworld-handler' )
|
45
|
-
route '/dump', handler( 'tcp://127.0.0.1:9997', 'request-dumper' )
|
29
|
+
route '/hello', handler( 'tcp://127.0.0.1:9999', 'helloworld-handler' )
|
30
|
+
route '/dump', handler( 'tcp://127.0.0.1:9997', 'request-dumper' )
|
46
31
|
|
47
32
|
end
|
48
33
|
|
49
|
-
filter
|
34
|
+
filter '/usr/local/lib/mongrel2/filters/null.so',
|
50
35
|
extensions: ["*.html", "*.txt"],
|
51
36
|
min_size: 1000
|
52
37
|
|
@@ -54,6 +39,3 @@ end
|
|
54
39
|
|
55
40
|
setting "zeromq.threads", 1
|
56
41
|
|
57
|
-
mkdir_p 'run'
|
58
|
-
mkdir_p 'logs'
|
59
|
-
|
data/lib/mongrel2.rb
CHANGED
@@ -14,10 +14,10 @@ module Mongrel2
|
|
14
14
|
abort "\n\n>>> Mongrel2 requires Ruby 1.9.2 or later. <<<\n\n" if RUBY_VERSION < '1.9.2'
|
15
15
|
|
16
16
|
# Library version constant
|
17
|
-
VERSION = '0.
|
17
|
+
VERSION = '0.11.0'
|
18
18
|
|
19
19
|
# Version-control revision constant
|
20
|
-
REVISION = %q$Revision:
|
20
|
+
REVISION = %q$Revision: 5d438ea6037a $
|
21
21
|
|
22
22
|
|
23
23
|
require 'mongrel2/logging'
|
data/lib/mongrel2/config.rb
CHANGED
data/lib/mongrel2/config/dsl.rb
CHANGED
@@ -3,79 +3,7 @@
|
|
3
3
|
require 'mongrel2' unless defined?( Mongrel2 )
|
4
4
|
require 'mongrel2/config' unless defined?( Mongrel2::Config )
|
5
5
|
|
6
|
-
#
|
7
|
-
#
|
8
|
-
# == Example
|
9
|
-
#
|
10
|
-
# This is the mongrel2.org config re-expressed in the Ruby DSL:
|
11
|
-
#
|
12
|
-
# # the server to run them all
|
13
|
-
# server '2f62bd5-9e59-49cd-993c-3b6013c28f05' do
|
14
|
-
#
|
15
|
-
# access_log "/logs/access.log"
|
16
|
-
# error_log "/logs/error.log"
|
17
|
-
# chroot "./"
|
18
|
-
# pid_file "/run/mongrel2.pid"
|
19
|
-
# default_host "mongrel2.org"
|
20
|
-
# name "main"
|
21
|
-
# port 6767
|
22
|
-
#
|
23
|
-
# # your main host
|
24
|
-
# host "mongrel2.org" do
|
25
|
-
#
|
26
|
-
# # a sample of doing some handlers
|
27
|
-
# route '@chat', handler(
|
28
|
-
# 'tcp://127.0.0.1:9999',
|
29
|
-
# '54c6755b-9628-40a4-9a2d-cc82a816345e',
|
30
|
-
# 'tcp://127.0.0.1:9998'
|
31
|
-
# )
|
32
|
-
#
|
33
|
-
# route '/handlertest', handler(
|
34
|
-
# 'tcp://127.0.0.1:9997',
|
35
|
-
# '34f9ceee-cd52-4b7f-b197-88bf2f0ec378',
|
36
|
-
# 'tcp://127.0.0.1:9996'
|
37
|
-
# )
|
38
|
-
#
|
39
|
-
# # a sample proxy route
|
40
|
-
# web_app_proxy = proxy( '127.0.0.1', 8080 )
|
41
|
-
#
|
42
|
-
# route '/chat/', web_app_proxy
|
43
|
-
# route '/', web_app_proxy
|
44
|
-
#
|
45
|
-
# # here's a sample directory
|
46
|
-
# test_directory = directory(
|
47
|
-
# 'tests/',
|
48
|
-
# :index_file => 'index.html',
|
49
|
-
# :default_ctype => 'text/plain'
|
50
|
-
# )
|
51
|
-
#
|
52
|
-
# route '/tests/', test_directory
|
53
|
-
# route '/testsmulti/(.*.json)', test_directory
|
54
|
-
#
|
55
|
-
# chat_demo_dir = directory(
|
56
|
-
# 'examples/chat/static/',
|
57
|
-
# :index_file => 'index.html',
|
58
|
-
# :default_ctype => 'text/plain'
|
59
|
-
# )
|
60
|
-
#
|
61
|
-
# route '/chatdemo/', chat_demo_dir
|
62
|
-
# route '/static/', chat_demo_dir
|
63
|
-
#
|
64
|
-
# route '/mp3stream', handler(
|
65
|
-
# 'tcp://127.0.0.1:9995',
|
66
|
-
# '53f9f1d1-1116-4751-b6ff-4fbe3e43d142',
|
67
|
-
# 'tcp://127.0.0.1:9994'
|
68
|
-
# )
|
69
|
-
# end
|
70
|
-
#
|
71
|
-
# end
|
72
|
-
#
|
73
|
-
# settings(
|
74
|
-
# "zeromq.threads" => 1,
|
75
|
-
# "upload.temp_store" => "/home/zedshaw/projects/mongrel2/tmp/upload.XXXXXX",
|
76
|
-
# "upload.temp_store_mode" => "0666"
|
77
|
-
# )
|
78
|
-
#
|
6
|
+
# See DSL.rdoc for details on how to use this mixin.
|
79
7
|
module Mongrel2::Config::DSL
|
80
8
|
|
81
9
|
|
@@ -85,10 +13,19 @@ module Mongrel2::Config::DSL
|
|
85
13
|
class Adapter
|
86
14
|
include Mongrel2::Loggable
|
87
15
|
|
88
|
-
###
|
16
|
+
### Create an instance of the specified +targetclass+ using the specified +opts+
|
17
|
+
### as initial values. The first pair of +opts+ will be used in the filter to
|
18
|
+
### find any previous instance and delete it.
|
89
19
|
def initialize( targetclass, opts={} )
|
90
20
|
self.log.debug "Wrapping a %p" % [ targetclass ]
|
91
21
|
@targetclass = targetclass
|
22
|
+
|
23
|
+
# Use the first pair as the primary key
|
24
|
+
unless opts.empty?
|
25
|
+
first_pair = Hash[ *opts.first ]
|
26
|
+
@targetclass.filter( first_pair ).destroy
|
27
|
+
end
|
28
|
+
|
92
29
|
@target = @targetclass.new( opts )
|
93
30
|
self.decorate_with_column_declaratives( @target )
|
94
31
|
self.decorate_with_custom_declaratives( @targetclass )
|
@@ -147,11 +84,32 @@ module Mongrel2::Config::DSL
|
|
147
84
|
### Create a Mongrel2::Config::Server with the specified +uuid+, evaluate
|
148
85
|
### the block (if given) within its context, and return it.
|
149
86
|
def server( uuid, &block )
|
150
|
-
|
87
|
+
adapter = nil
|
88
|
+
|
89
|
+
Mongrel2.log.info "Entering transaction for server %p" % [ uuid ]
|
90
|
+
Mongrel2::Config.db.transaction do
|
91
|
+
Mongrel2.log.info " ensuring db is set up..."
|
92
|
+
Mongrel2::Config.init_database
|
93
|
+
|
94
|
+
# Set up the options hash with the UUID and reasonable defaults
|
95
|
+
# for everything else
|
96
|
+
server_opts = {
|
97
|
+
uuid: uuid,
|
98
|
+
access_log: "/logs/access.log",
|
99
|
+
error_log: "/logs/error.log",
|
100
|
+
pid_file: "/run/mongrel2.pid",
|
101
|
+
default_host: "localhost",
|
102
|
+
port: 8888,
|
103
|
+
}
|
104
|
+
|
105
|
+
Mongrel2.log.debug "Server [%s] (block: %p)" % [ uuid, block ]
|
106
|
+
adapter = Adapter.new( Mongrel2::Config::Server, server_opts )
|
107
|
+
adapter.instance_eval( &block ) if block
|
108
|
+
|
109
|
+
Mongrel2.log.info " saving server %p..." % [ uuid ]
|
110
|
+
adapter.target.save
|
111
|
+
end
|
151
112
|
|
152
|
-
Mongrel2.log.debug "Server [%s] (block: %p)" % [ uuid, block ]
|
153
|
-
adapter = Adapter.new( Mongrel2::Config::Server, :uuid => uuid )
|
154
|
-
adapter.instance_eval( &block ) if block
|
155
113
|
return adapter.target
|
156
114
|
end
|
157
115
|
|
@@ -159,7 +117,9 @@ module Mongrel2::Config::DSL
|
|
159
117
|
### Set the value of one of the 'Tweakable Expert Settings'
|
160
118
|
def setting( key, val )
|
161
119
|
Mongrel2::Config.init_database
|
162
|
-
|
120
|
+
setting = Mongrel2::Config::Setting.find_or_create( key: key )
|
121
|
+
setting.value = val
|
122
|
+
setting.save
|
163
123
|
end
|
164
124
|
|
165
125
|
|
@@ -181,7 +141,7 @@ module Mongrel2::Config::DSL
|
|
181
141
|
def mimetype( extension, mimetype )
|
182
142
|
Mongrel2::Config.init_database
|
183
143
|
|
184
|
-
type = Mongrel2::Config::Mimetype.find_or_create( :
|
144
|
+
type = Mongrel2::Config::Mimetype.find_or_create( extension: extension )
|
185
145
|
type.mimetype = mimetype
|
186
146
|
type.save
|
187
147
|
|
@@ -90,12 +90,13 @@ class Mongrel2::Config::Server < Mongrel2::Config( :server )
|
|
90
90
|
self.target.save( :validate => false )
|
91
91
|
|
92
92
|
Mongrel2.log.debug "Host [%s] (block: %p)" % [ name, block ]
|
93
|
-
adapter = Mongrel2::Config::DSL::Adapter.new( Mongrel2::Config::Host,
|
94
|
-
|
93
|
+
adapter = Mongrel2::Config::DSL::Adapter.new( Mongrel2::Config::Host, name: name )
|
94
|
+
adapter.target.matching = name
|
95
95
|
adapter.instance_eval( &block ) if block
|
96
96
|
self.target.add_host( adapter.target )
|
97
97
|
end
|
98
98
|
|
99
|
+
|
99
100
|
### Add a Mongrel2::Config::Filter to the Server object with the specified
|
100
101
|
### +path+ (name) and +settings+ hash.
|
101
102
|
def filter( path, settings={} )
|
data/lib/mongrel2/httprequest.rb
CHANGED
@@ -60,12 +60,24 @@ class Mongrel2::HTTPRequest < Mongrel2::Request
|
|
60
60
|
end
|
61
61
|
|
62
62
|
|
63
|
+
### Set the current request's Content-Type.
|
64
|
+
def content_type=( type )
|
65
|
+
return self.headers.content_type = type
|
66
|
+
end
|
67
|
+
|
68
|
+
|
63
69
|
### Fetch the encoding type of the request's content, as set in its header.
|
64
70
|
def content_encoding
|
65
71
|
return self.headers.content_encoding
|
66
72
|
end
|
67
73
|
|
68
74
|
|
75
|
+
### Set the request's encoding type.
|
76
|
+
def content_encoding=( type )
|
77
|
+
return self.headers.content_encoding = type
|
78
|
+
end
|
79
|
+
|
80
|
+
|
69
81
|
|
70
82
|
#########
|
71
83
|
protected
|
@@ -31,6 +31,13 @@ describe Mongrel2::Config::DSL do
|
|
31
31
|
setup_config_db()
|
32
32
|
end
|
33
33
|
|
34
|
+
before( :each ) do
|
35
|
+
Mongrel2::Config::Server.truncate
|
36
|
+
Mongrel2::Config::Host.truncate
|
37
|
+
Mongrel2::Config::Route.truncate
|
38
|
+
Mongrel2::Config::Filter.truncate
|
39
|
+
end
|
40
|
+
|
34
41
|
after( :all ) do
|
35
42
|
reset_logging()
|
36
43
|
end
|
@@ -161,6 +168,14 @@ describe Mongrel2::Config::DSL do
|
|
161
168
|
|
162
169
|
describe 'settings' do
|
163
170
|
|
171
|
+
before( :all ) do
|
172
|
+
@ids = Mongrel2::Config::Setting.map( :id )
|
173
|
+
end
|
174
|
+
|
175
|
+
after( :each ) do
|
176
|
+
Mongrel2::Config::Setting.dataset.filter( ~:id => @ids ).delete
|
177
|
+
end
|
178
|
+
|
164
179
|
it "can set the expert tweakable settings en masse" do
|
165
180
|
result = settings(
|
166
181
|
"zeromq.threads" => 8,
|
@@ -54,7 +54,8 @@ describe Mongrel2::Config do
|
|
54
54
|
|
55
55
|
it "has a convenience method for fetching an Array of all of its configured servers" do
|
56
56
|
Mongrel2::Config.init_database
|
57
|
-
Mongrel2::Config::Server.
|
57
|
+
Mongrel2::Config::Server.truncate
|
58
|
+
|
58
59
|
s = Mongrel2::Config::Server.create(
|
59
60
|
uuid: TEST_UUID,
|
60
61
|
access_log: '/log/access.log',
|
@@ -97,10 +97,20 @@ describe Mongrel2::HTTPRequest do
|
|
97
97
|
@req.content_type.should == 'application/x-pdf'
|
98
98
|
end
|
99
99
|
|
100
|
+
it "provides a convenience method for resetting the 'Content-type' header" do
|
101
|
+
@req.content_type = 'application/json'
|
102
|
+
@req.content_type.should == 'application/json'
|
103
|
+
end
|
104
|
+
|
100
105
|
it "provides a convenience method for fetching the 'Content-encoding' header" do
|
101
106
|
@req.content_encoding.should == 'gzip'
|
102
107
|
end
|
103
108
|
|
109
|
+
it "provides a convenience method for resetting the 'Content-encoding' header" do
|
110
|
+
@req.content_encoding = 'identity'
|
111
|
+
@req.content_encoding.should == 'identity'
|
112
|
+
end
|
113
|
+
|
104
114
|
end
|
105
115
|
|
106
116
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongrel2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -48,11 +48,11 @@ cert_chain:
|
|
48
48
|
-----END CERTIFICATE-----
|
49
49
|
|
50
50
|
'
|
51
|
-
date: 2012-02-
|
51
|
+
date: 2012-02-16 00:00:00.000000000 Z
|
52
52
|
dependencies:
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: nokogiri
|
55
|
-
requirement: &
|
55
|
+
requirement: &70337700771620 !ruby/object:Gem::Requirement
|
56
56
|
none: false
|
57
57
|
requirements:
|
58
58
|
- - ~>
|
@@ -60,10 +60,10 @@ dependencies:
|
|
60
60
|
version: '1.5'
|
61
61
|
type: :runtime
|
62
62
|
prerelease: false
|
63
|
-
version_requirements: *
|
63
|
+
version_requirements: *70337700771620
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
65
|
name: sequel
|
66
|
-
requirement: &
|
66
|
+
requirement: &70337700771160 !ruby/object:Gem::Requirement
|
67
67
|
none: false
|
68
68
|
requirements:
|
69
69
|
- - ~>
|
@@ -71,10 +71,10 @@ dependencies:
|
|
71
71
|
version: '3.31'
|
72
72
|
type: :runtime
|
73
73
|
prerelease: false
|
74
|
-
version_requirements: *
|
74
|
+
version_requirements: *70337700771160
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: amalgalite
|
77
|
-
requirement: &
|
77
|
+
requirement: &70337700770600 !ruby/object:Gem::Requirement
|
78
78
|
none: false
|
79
79
|
requirements:
|
80
80
|
- - ~>
|
@@ -82,10 +82,10 @@ dependencies:
|
|
82
82
|
version: '1.1'
|
83
83
|
type: :runtime
|
84
84
|
prerelease: false
|
85
|
-
version_requirements: *
|
85
|
+
version_requirements: *70337700770600
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
87
|
name: tnetstring
|
88
|
-
requirement: &
|
88
|
+
requirement: &70337700770060 !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
91
|
- - ~>
|
@@ -93,10 +93,10 @@ dependencies:
|
|
93
93
|
version: '0.3'
|
94
94
|
type: :runtime
|
95
95
|
prerelease: false
|
96
|
-
version_requirements: *
|
96
|
+
version_requirements: *70337700770060
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: yajl-ruby
|
99
|
-
requirement: &
|
99
|
+
requirement: &70337700769520 !ruby/object:Gem::Requirement
|
100
100
|
none: false
|
101
101
|
requirements:
|
102
102
|
- - ~>
|
@@ -104,10 +104,10 @@ dependencies:
|
|
104
104
|
version: '1.0'
|
105
105
|
type: :runtime
|
106
106
|
prerelease: false
|
107
|
-
version_requirements: *
|
107
|
+
version_requirements: *70337700769520
|
108
108
|
- !ruby/object:Gem::Dependency
|
109
109
|
name: trollop
|
110
|
-
requirement: &
|
110
|
+
requirement: &70337700769020 !ruby/object:Gem::Requirement
|
111
111
|
none: false
|
112
112
|
requirements:
|
113
113
|
- - ~>
|
@@ -115,10 +115,10 @@ dependencies:
|
|
115
115
|
version: '1.16'
|
116
116
|
type: :runtime
|
117
117
|
prerelease: false
|
118
|
-
version_requirements: *
|
118
|
+
version_requirements: *70337700769020
|
119
119
|
- !ruby/object:Gem::Dependency
|
120
120
|
name: sysexits
|
121
|
-
requirement: &
|
121
|
+
requirement: &70337700768500 !ruby/object:Gem::Requirement
|
122
122
|
none: false
|
123
123
|
requirements:
|
124
124
|
- - ~>
|
@@ -126,10 +126,10 @@ dependencies:
|
|
126
126
|
version: '1.0'
|
127
127
|
type: :runtime
|
128
128
|
prerelease: false
|
129
|
-
version_requirements: *
|
129
|
+
version_requirements: *70337700768500
|
130
130
|
- !ruby/object:Gem::Dependency
|
131
131
|
name: zmq
|
132
|
-
requirement: &
|
132
|
+
requirement: &70337700767980 !ruby/object:Gem::Requirement
|
133
133
|
none: false
|
134
134
|
requirements:
|
135
135
|
- - ~>
|
@@ -137,10 +137,10 @@ dependencies:
|
|
137
137
|
version: 2.1.4
|
138
138
|
type: :runtime
|
139
139
|
prerelease: false
|
140
|
-
version_requirements: *
|
140
|
+
version_requirements: *70337700767980
|
141
141
|
- !ruby/object:Gem::Dependency
|
142
142
|
name: hoe-mercurial
|
143
|
-
requirement: &
|
143
|
+
requirement: &70337700767500 !ruby/object:Gem::Requirement
|
144
144
|
none: false
|
145
145
|
requirements:
|
146
146
|
- - ~>
|
@@ -148,10 +148,10 @@ dependencies:
|
|
148
148
|
version: 1.3.1
|
149
149
|
type: :development
|
150
150
|
prerelease: false
|
151
|
-
version_requirements: *
|
151
|
+
version_requirements: *70337700767500
|
152
152
|
- !ruby/object:Gem::Dependency
|
153
153
|
name: hoe-highline
|
154
|
-
requirement: &
|
154
|
+
requirement: &70337700766940 !ruby/object:Gem::Requirement
|
155
155
|
none: false
|
156
156
|
requirements:
|
157
157
|
- - ~>
|
@@ -159,10 +159,10 @@ dependencies:
|
|
159
159
|
version: 0.0.1
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
|
-
version_requirements: *
|
162
|
+
version_requirements: *70337700766940
|
163
163
|
- !ruby/object:Gem::Dependency
|
164
164
|
name: configurability
|
165
|
-
requirement: &
|
165
|
+
requirement: &70337700766400 !ruby/object:Gem::Requirement
|
166
166
|
none: false
|
167
167
|
requirements:
|
168
168
|
- - ~>
|
@@ -170,10 +170,10 @@ dependencies:
|
|
170
170
|
version: '1.0'
|
171
171
|
type: :development
|
172
172
|
prerelease: false
|
173
|
-
version_requirements: *
|
173
|
+
version_requirements: *70337700766400
|
174
174
|
- !ruby/object:Gem::Dependency
|
175
175
|
name: rspec
|
176
|
-
requirement: &
|
176
|
+
requirement: &70337700765860 !ruby/object:Gem::Requirement
|
177
177
|
none: false
|
178
178
|
requirements:
|
179
179
|
- - ~>
|
@@ -181,29 +181,29 @@ dependencies:
|
|
181
181
|
version: '2.8'
|
182
182
|
type: :development
|
183
183
|
prerelease: false
|
184
|
-
version_requirements: *
|
184
|
+
version_requirements: *70337700765860
|
185
185
|
- !ruby/object:Gem::Dependency
|
186
|
-
name:
|
187
|
-
requirement: &
|
186
|
+
name: rdoc
|
187
|
+
requirement: &70337700765360 !ruby/object:Gem::Requirement
|
188
188
|
none: false
|
189
189
|
requirements:
|
190
190
|
- - ~>
|
191
191
|
- !ruby/object:Gem::Version
|
192
|
-
version: '
|
192
|
+
version: '3.10'
|
193
193
|
type: :development
|
194
194
|
prerelease: false
|
195
|
-
version_requirements: *
|
195
|
+
version_requirements: *70337700765360
|
196
196
|
- !ruby/object:Gem::Dependency
|
197
|
-
name:
|
198
|
-
requirement: &
|
197
|
+
name: hoe
|
198
|
+
requirement: &70337700764820 !ruby/object:Gem::Requirement
|
199
199
|
none: false
|
200
200
|
requirements:
|
201
201
|
- - ~>
|
202
202
|
- !ruby/object:Gem::Version
|
203
|
-
version: '
|
203
|
+
version: '2.13'
|
204
204
|
type: :development
|
205
205
|
prerelease: false
|
206
|
-
version_requirements: *
|
206
|
+
version_requirements: *70337700764820
|
207
207
|
description: ! "Ruby-Mongrel2 is a complete Ruby (1.9-only) connector for \nMongrel2[http://mongrel2.org/].\n\nThis
|
208
208
|
library includes configuration-database ORM classes, a Ruby\nimplementation of the
|
209
209
|
'm2sh' tool, a configuration DSL for generating config\ndatabases in pure Ruby,
|
@@ -227,12 +227,14 @@ extensions: []
|
|
227
227
|
extra_rdoc_files:
|
228
228
|
- Manifest.txt
|
229
229
|
- examples/README.txt
|
230
|
-
-
|
230
|
+
- DSL.rdoc
|
231
231
|
- History.rdoc
|
232
|
+
- README.rdoc
|
232
233
|
files:
|
233
234
|
- .autotest
|
234
235
|
- .gemtest
|
235
236
|
- ChangeLog
|
237
|
+
- DSL.rdoc
|
236
238
|
- History.rdoc
|
237
239
|
- Manifest.txt
|
238
240
|
- README.rdoc
|
@@ -327,7 +329,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
327
329
|
version: '0'
|
328
330
|
requirements: []
|
329
331
|
rubyforge_project: mongrel2
|
330
|
-
rubygems_version: 1.8.
|
332
|
+
rubygems_version: 1.8.10
|
331
333
|
signing_key:
|
332
334
|
specification_version: 3
|
333
335
|
summary: Ruby-Mongrel2 is a complete Ruby (1.9-only) connector for Mongrel2[http://mongrel2.org/]
|
metadata.gz.sig
CHANGED
Binary file
|