fcgi 0.8.8 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +21 -0
- data/{README → README.rdoc} +7 -9
- data/README.signals +2 -2
- data/VERSION +1 -0
- data/ext/fcgi/Makefile +1 -0
- data/ext/fcgi/extconf.rb +0 -0
- data/ext/fcgi/fcgi.c +32 -21
- data/fcgi.gemspec +33 -0
- data/lib/fcgi.rb +50 -28
- data/test/helper.rb +9 -0
- data/test/test_fcgi.rb +7 -0
- metadata +51 -40
- data/ChangeLog +0 -30
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Copyright (c) 2009 saks
|
2
|
+
Copyright (c) 2013 mva
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/{README → README.rdoc}
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
= fcgi - FastCGI library for Ruby
|
1
|
+
= fcgi - The New generation of FastCGI library for Ruby.
|
2
2
|
|
3
|
-
Version 0.
|
3
|
+
Version 0.9.1
|
4
4
|
|
5
5
|
== Depends
|
6
6
|
|
@@ -12,11 +12,7 @@ Version 0.8.7
|
|
12
12
|
|
13
13
|
== Install
|
14
14
|
|
15
|
-
$
|
16
|
-
(Pure Ruby Version: ruby install.rb config --without-ext)
|
17
|
-
(Some systems need: ruby install.rb config -- --with-fcgi-include=/usr/local/include --with-fcgi-lib=/usr/local/lib)
|
18
|
-
$ ruby install.rb setup
|
19
|
-
# ruby install.rb install
|
15
|
+
$ gem install ruby-fcgi-ng
|
20
16
|
|
21
17
|
== Usage
|
22
18
|
=== Class Method
|
@@ -42,7 +38,6 @@ Version 0.8.7
|
|
42
38
|
used in this way, as it dynamically adds a large number of methods
|
43
39
|
to itself each time a new instance is created.
|
44
40
|
|
45
|
-
|
46
41
|
=== Instance Method
|
47
42
|
--- FCGI#finish
|
48
43
|
Finish
|
@@ -60,11 +55,12 @@ Version 0.8.7
|
|
60
55
|
Returns Environment(Hash)
|
61
56
|
|
62
57
|
== Sample
|
58
|
+
|
63
59
|
Using the FastCGI native interface:
|
64
60
|
|
65
61
|
#!/usr/bin/ruby
|
66
62
|
require "fcgi"
|
67
|
-
|
63
|
+
|
68
64
|
FCGI.each {|request|
|
69
65
|
out = request.out
|
70
66
|
out.print "Content-Type: text/plain\r\n"
|
@@ -104,7 +100,9 @@ standard CGI library.
|
|
104
100
|
|
105
101
|
fcgi.c 0.1 Copyright (C) 1998-1999 Network Applied Communication Laboratory, Inc.
|
106
102
|
0.8 Copyright (C) 2002 MoonWolf <moonwolf@moonwolf.com>
|
103
|
+
0.9 Copyright (C) 2013 MoonWolf <mva@mva.name>
|
107
104
|
|
108
105
|
fastcgi.rb 0.7 Copyright (C) 2001 Eli Green
|
109
106
|
fcgi.rb 0.8 Copyright (C) 2002 MoonWolf <moonwolf@moonwolf.com>
|
110
107
|
fcgi.rb 0.8.5 Copyright (C) 2004 Minero Aoki
|
108
|
+
|
data/README.signals
CHANGED
@@ -44,8 +44,8 @@ thread is supposed to write a message every 10 seconds, but under older
|
|
44
44
|
versions of ruby-fcgi it does not do so if it is waiting for a new request.
|
45
45
|
|
46
46
|
#!/usr/local/bin/ruby
|
47
|
-
require "fcgi"
|
48
|
-
|
47
|
+
require "fcgi"
|
48
|
+
|
49
49
|
Thread.new do
|
50
50
|
f = File.new("/tmp/fcgi.log","a")
|
51
51
|
f.sync=true
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.9.1
|
data/ext/fcgi/Makefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Use ruby extconf.rb to generate makefile
|
data/ext/fcgi/extconf.rb
CHANGED
File without changes
|
data/ext/fcgi/fcgi.c
CHANGED
@@ -11,12 +11,21 @@
|
|
11
11
|
#include <fcntl.h>
|
12
12
|
|
13
13
|
#include "ruby.h"
|
14
|
+
|
15
|
+
#ifndef RSTRING_PTR
|
16
|
+
#define RSTRING_PTR(str) (RSTRING(str)->ptr)
|
17
|
+
#endif
|
18
|
+
#ifndef RSTRING_LEN
|
19
|
+
#define RSTRING_LEN(str) (RSTRING(str)->len)
|
20
|
+
#endif
|
21
|
+
|
14
22
|
#ifdef HAVE_FASTCGI_FCGIAPP_H
|
15
23
|
#include <fastcgi/fcgiapp.h>
|
16
24
|
#else
|
17
25
|
#include "fcgiapp.h"
|
18
26
|
#endif
|
19
27
|
|
28
|
+
|
20
29
|
static VALUE cFCGI;
|
21
30
|
static VALUE eFCGIError;
|
22
31
|
static VALUE cFCGIStream;
|
@@ -54,9 +63,9 @@ static VALUE fcgi_s_accept(VALUE self)
|
|
54
63
|
int status;
|
55
64
|
FCGX_Request *req;
|
56
65
|
fd_set readfds;
|
57
|
-
|
66
|
+
|
58
67
|
req = ALLOC(FCGX_Request);
|
59
|
-
|
68
|
+
|
60
69
|
status = FCGX_InitRequest(req,0,0);
|
61
70
|
if (status != 0) {
|
62
71
|
rb_raise(eFCGIError, "FCGX_Init() failed");
|
@@ -68,7 +77,7 @@ static VALUE fcgi_s_accept(VALUE self)
|
|
68
77
|
if (rb_thread_select(req->listen_sock+1, &readfds, NULL, NULL, NULL) < 1) {
|
69
78
|
return Qnil;
|
70
79
|
}
|
71
|
-
|
80
|
+
|
72
81
|
status = FCGX_Accept_r(req);
|
73
82
|
if (status >= 0) {
|
74
83
|
fcgi_data *data;
|
@@ -84,7 +93,7 @@ static VALUE fcgi_s_accept(VALUE self)
|
|
84
93
|
if (flags & O_NONBLOCK) {
|
85
94
|
fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
|
86
95
|
}
|
87
|
-
|
96
|
+
|
88
97
|
obj = Data_Make_Struct(self, fcgi_data, fcgi_mark, fcgi_free_req, data);
|
89
98
|
data->req = req;
|
90
99
|
data->in = Data_Wrap_Struct(cFCGIStream, 0, 0, req->in);
|
@@ -103,7 +112,7 @@ static VALUE fcgi_s_accept(VALUE self)
|
|
103
112
|
OBJ_TAINT(value);
|
104
113
|
rb_hash_aset(data->env, key, value);
|
105
114
|
}
|
106
|
-
|
115
|
+
|
107
116
|
return obj;
|
108
117
|
} else {
|
109
118
|
return Qnil;
|
@@ -113,7 +122,7 @@ static VALUE fcgi_s_accept(VALUE self)
|
|
113
122
|
static VALUE fcgi_s_each(VALUE self)
|
114
123
|
{
|
115
124
|
VALUE fcgi;
|
116
|
-
|
125
|
+
|
117
126
|
while ((fcgi = fcgi_s_accept(self)) != Qnil) {
|
118
127
|
rb_yield(fcgi);
|
119
128
|
}
|
@@ -164,11 +173,11 @@ static VALUE fcgi_env(VALUE self)
|
|
164
173
|
static VALUE fcgi_finish(VALUE self)
|
165
174
|
{
|
166
175
|
fcgi_data *data;
|
167
|
-
|
176
|
+
|
168
177
|
Data_Get_Struct(self, fcgi_data, data);
|
169
|
-
|
178
|
+
|
170
179
|
FCGX_Finish_r(data->req);
|
171
|
-
|
180
|
+
|
172
181
|
return Qtrue;
|
173
182
|
}
|
174
183
|
|
@@ -266,16 +275,19 @@ static VALUE fcgi_stream_printf(int argc, VALUE *argv, VALUE out)
|
|
266
275
|
|
267
276
|
static VALUE fcgi_stream_puts _((int, VALUE*, VALUE));
|
268
277
|
|
269
|
-
static VALUE fcgi_stream_puts_ary(VALUE ary, VALUE out)
|
278
|
+
static VALUE fcgi_stream_puts_ary(VALUE ary, VALUE out, int recur)
|
270
279
|
{
|
271
280
|
VALUE tmp;
|
272
281
|
int i;
|
273
282
|
|
283
|
+
if (recur) {
|
284
|
+
tmp = rb_str_new2("[...]");
|
285
|
+
fcgi_stream_puts(1, &tmp, out);
|
286
|
+
return Qnil;
|
287
|
+
}
|
288
|
+
|
274
289
|
for (i=0; i<RARRAY_LEN(ary); i++) {
|
275
290
|
tmp = RARRAY_PTR(ary)[i];
|
276
|
-
if (rb_inspecting_p(tmp)) {
|
277
|
-
tmp = rb_str_new2("[...]");
|
278
|
-
}
|
279
291
|
fcgi_stream_puts(1, &tmp, out);
|
280
292
|
}
|
281
293
|
return Qnil;
|
@@ -297,7 +309,7 @@ static VALUE fcgi_stream_puts(int argc, VALUE *argv, VALUE out)
|
|
297
309
|
line = rb_str_new2("nil");
|
298
310
|
break;
|
299
311
|
case T_ARRAY:
|
300
|
-
|
312
|
+
rb_exec_recursive(fcgi_stream_puts_ary, argv[i], out);
|
301
313
|
continue;
|
302
314
|
default:
|
303
315
|
line = argv[i];
|
@@ -358,11 +370,10 @@ static VALUE fcgi_stream_ungetc(VALUE self, VALUE ch)
|
|
358
370
|
return INT2NUM(c);
|
359
371
|
}
|
360
372
|
|
361
|
-
static VALUE fcgi_stream_gets(VALUE self)
|
362
|
-
{
|
373
|
+
static VALUE fcgi_stream_gets(VALUE self) {
|
363
374
|
FCGX_Stream *stream;
|
364
375
|
char buff[BUFSIZ];
|
365
|
-
VALUE str = rb_str_new(
|
376
|
+
VALUE str = rb_str_new(0,0);
|
366
377
|
OBJ_TAINT(str);
|
367
378
|
|
368
379
|
if (rb_safe_level() >= 4 && !OBJ_TAINTED(self)) {
|
@@ -408,7 +419,7 @@ static VALUE fcgi_stream_read(int argc, VALUE *argv, VALUE self)
|
|
408
419
|
}
|
409
420
|
str = rb_str_new(buff, n);
|
410
421
|
OBJ_TAINT(str);
|
411
|
-
|
422
|
+
|
412
423
|
while(!FCGX_HasSeenEOF(stream)) {
|
413
424
|
n = FCGX_GetStr(buff, 16384, stream);
|
414
425
|
CHECK_STREAM_ERROR(stream);
|
@@ -508,9 +519,9 @@ static VALUE fcgi_stream_setsync(VALUE self,VALUE sync)
|
|
508
519
|
|
509
520
|
|
510
521
|
void Init_fcgi() {
|
511
|
-
|
522
|
+
|
512
523
|
FCGX_Init();
|
513
|
-
|
524
|
+
|
514
525
|
cFCGI = rb_define_class("FCGI", rb_cObject);
|
515
526
|
eFCGIError =rb_define_class_under(cFCGI, "Error", rb_eStandardError);
|
516
527
|
rb_define_singleton_method(cFCGI, "accept", fcgi_s_accept, 0);
|
@@ -522,7 +533,7 @@ void Init_fcgi() {
|
|
522
533
|
rb_define_method(cFCGI, "err", fcgi_err, 0);
|
523
534
|
rb_define_method(cFCGI, "env", fcgi_env, 0);
|
524
535
|
rb_define_method(cFCGI, "finish", fcgi_finish, 0);
|
525
|
-
|
536
|
+
|
526
537
|
cFCGIStream = rb_define_class_under(cFCGI, "Stream", rb_cObject);
|
527
538
|
eFCGIStreamError =rb_define_class_under(cFCGIStream, "Error", rb_eStandardError);
|
528
539
|
eFCGIStreamUnsupportedVersionError =
|
data/fcgi.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = %q{fcgi}
|
3
|
+
s.version = "0.9.1"
|
4
|
+
|
5
|
+
s.authors = [%q{mva}]
|
6
|
+
s.date = %q{2013-02-20}
|
7
|
+
s.description = %q{FastCGI is a language independent, scalable, open extension to CGI that provides high performance without the limitations of server specific APIs. This version aims to be compatible with both 1.8.x and 1.9.x versions of Ruby, and also will be ported to 2.0.x.}
|
8
|
+
s.email = %q{mva@mva.name}
|
9
|
+
s.extensions = [%q{ext/fcgi/extconf.rb}]
|
10
|
+
s.extra_rdoc_files = [
|
11
|
+
"LICENSE",
|
12
|
+
"README.rdoc",
|
13
|
+
"README.signals"
|
14
|
+
]
|
15
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
16
|
+
s.files = [
|
17
|
+
"VERSION",
|
18
|
+
"ext/fcgi/MANIFEST",
|
19
|
+
"ext/fcgi/Makefile",
|
20
|
+
"ext/fcgi/extconf.rb",
|
21
|
+
"ext/fcgi/fcgi.c",
|
22
|
+
"lib/fcgi.rb",
|
23
|
+
"fcgi.gemspec"
|
24
|
+
]
|
25
|
+
s.test_files = [
|
26
|
+
"test/helper.rb",
|
27
|
+
"test/test_fcgi.rb"
|
28
|
+
]
|
29
|
+
s.homepage = %q{http://github.com/alphallc/ruby-fcgi-ng}
|
30
|
+
s.require_paths = [%q{lib}]
|
31
|
+
s.summary = %q{FastCGI library for Ruby.}
|
32
|
+
end
|
33
|
+
|
data/lib/fcgi.rb
CHANGED
@@ -1,25 +1,30 @@
|
|
1
1
|
=begin
|
2
2
|
|
3
|
-
fcgi.rb 0.
|
3
|
+
fcgi.rb 0.9.0 - fcgi.so compatible pure-ruby FastCGI library
|
4
4
|
|
5
5
|
fastcgi.rb Copyright (C) 2001 Eli Green
|
6
6
|
fcgi.rb Copyright (C) 2002-2003 MoonWolf <moonwolf@moonwolf.com>
|
7
7
|
fcgi.rb Copyright (C) 2004 Minero Aoki
|
8
|
+
fcgi.rb Copyright (C) 2011 saks and Julik Tarkhanov
|
9
|
+
fcgi.rb Copyright (C) 2012-2013 mva
|
8
10
|
|
9
11
|
=end
|
10
12
|
trap('SIGTERM') { exit }
|
11
13
|
trap('SIGPIPE','IGNORE')
|
12
14
|
|
13
15
|
begin
|
14
|
-
raise LoadError if
|
16
|
+
raise LoadError if ENV["USE_PURE_RUBY_FCGI"]
|
15
17
|
require "fcgi.so"
|
16
|
-
rescue LoadError
|
18
|
+
rescue LoadError # Load the pure ruby version instead
|
19
|
+
# At this point we do have STDERR so put it to some good use
|
20
|
+
$stderr.puts "Your FCGI gem does not contain the FCGI shared library, running pure ruby instead"
|
21
|
+
|
17
22
|
require 'socket'
|
18
23
|
require 'stringio'
|
19
|
-
|
24
|
+
|
20
25
|
class FCGI
|
21
|
-
|
22
|
-
def self
|
26
|
+
|
27
|
+
def self.is_cgi?
|
23
28
|
begin
|
24
29
|
s = Socket.for_fd($stdin.fileno)
|
25
30
|
s.getpeername
|
@@ -31,21 +36,21 @@ rescue LoadError
|
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
34
|
-
def self
|
39
|
+
def self.each(&block)
|
35
40
|
f = default_connection()
|
36
41
|
Server.new(f).each_request(&block)
|
37
42
|
ensure
|
38
43
|
f.close if f
|
39
44
|
end
|
40
45
|
|
41
|
-
def self
|
46
|
+
def self.each_request(&block)
|
42
47
|
f = default_connection()
|
43
48
|
Server.new(f).each_request(&block)
|
44
49
|
ensure
|
45
50
|
f.close if f
|
46
51
|
end
|
47
52
|
|
48
|
-
def self
|
53
|
+
def self.default_connection
|
49
54
|
::Socket.for_fd($stdin.fileno)
|
50
55
|
end
|
51
56
|
|
@@ -306,11 +311,11 @@ rescue LoadError
|
|
306
311
|
HEADER_FORMAT = 'CCnnCC'
|
307
312
|
HEADER_LENGTH = 8
|
308
313
|
|
309
|
-
def self
|
314
|
+
def self.parse_header(buf)
|
310
315
|
return *buf.unpack(HEADER_FORMAT)
|
311
316
|
end
|
312
317
|
|
313
|
-
def self
|
318
|
+
def self.class_for(type)
|
314
319
|
RECORD_CLASS[type]
|
315
320
|
end
|
316
321
|
|
@@ -385,7 +390,7 @@ rescue LoadError
|
|
385
390
|
# uint8_t reserved[3];
|
386
391
|
BODY_FORMAT = 'NCC3'
|
387
392
|
|
388
|
-
def self
|
393
|
+
def self.parse(id, body)
|
389
394
|
appstatus, protostatus, *reserved = *body.unpack(BODY_FORMAT)
|
390
395
|
new(id, appstatus, protostatus)
|
391
396
|
end
|
@@ -411,7 +416,7 @@ rescue LoadError
|
|
411
416
|
# uint8_t reserved[7];
|
412
417
|
BODY_FORMAT = 'CC7'
|
413
418
|
|
414
|
-
def self
|
419
|
+
def self.parse(id, body)
|
415
420
|
type, *reserved = *body.unpack(BODY_FORMAT)
|
416
421
|
new(id, type)
|
417
422
|
end
|
@@ -431,11 +436,11 @@ rescue LoadError
|
|
431
436
|
end
|
432
437
|
|
433
438
|
class ValuesRecord < Record
|
434
|
-
def self
|
439
|
+
def self.parse(id, body)
|
435
440
|
new(id, parse_values(body))
|
436
441
|
end
|
437
442
|
|
438
|
-
def self
|
443
|
+
def self.parse_values(buf)
|
439
444
|
result = {}
|
440
445
|
until buf.empty?
|
441
446
|
name, value = *read_pair(buf)
|
@@ -444,16 +449,28 @@ rescue LoadError
|
|
444
449
|
result
|
445
450
|
end
|
446
451
|
|
447
|
-
def self
|
452
|
+
def self.read_pair(buf)
|
448
453
|
nlen = read_length(buf)
|
449
454
|
vlen = read_length(buf)
|
450
|
-
|
455
|
+
[buf.slice!(0, nlen), buf.slice!(0, vlen)]
|
451
456
|
end
|
452
457
|
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
458
|
+
|
459
|
+
if "".respond_to?(:bytes) # Ruby 1.9 string semantics
|
460
|
+
def self.read_length(buf)
|
461
|
+
if buf[0].bytes.first >> 7 == 0
|
462
|
+
buf.slice!(0,1)[0].bytes.first
|
463
|
+
else
|
464
|
+
buf.slice!(0,4).unpack('N')[0] & ((1<<31) - 1)
|
465
|
+
end
|
466
|
+
end
|
467
|
+
else # Ruby 1.8 string
|
468
|
+
def self.read_length(buf)
|
469
|
+
if buf[0] >> 7 == 0
|
470
|
+
buf.slice!(0,1)[0].bytes.first
|
471
|
+
else
|
472
|
+
buf.slice!(0,4).unpack('N')[0] & ((1<<31) - 1)
|
473
|
+
end
|
457
474
|
end
|
458
475
|
end
|
459
476
|
|
@@ -502,7 +519,7 @@ rescue LoadError
|
|
502
519
|
end
|
503
520
|
|
504
521
|
class GenericDataRecord < Record
|
505
|
-
def self
|
522
|
+
def self.parse(id, body)
|
506
523
|
new(id, body)
|
507
524
|
end
|
508
525
|
|
@@ -520,7 +537,11 @@ rescue LoadError
|
|
520
537
|
private
|
521
538
|
|
522
539
|
def make_body
|
523
|
-
@flagment
|
540
|
+
if @flagment.respond_to? 'force_encoding' then
|
541
|
+
return @flagment.dup.force_encoding('BINARY')
|
542
|
+
else
|
543
|
+
return @flagment
|
544
|
+
end
|
524
545
|
end
|
525
546
|
end
|
526
547
|
|
@@ -564,13 +585,13 @@ end # begin
|
|
564
585
|
# are defined within module 'CGI', even if you have subclassed it
|
565
586
|
|
566
587
|
class FCGI
|
567
|
-
def self
|
588
|
+
def self.each_cgi(*args)
|
568
589
|
require 'cgi'
|
569
590
|
|
570
591
|
eval(<<-EOS,TOPLEVEL_BINDING)
|
571
592
|
class CGI
|
572
593
|
public :env_table
|
573
|
-
def self
|
594
|
+
def self.remove_params
|
574
595
|
if (const_defined?(:CGI_PARAMS))
|
575
596
|
remove_const(:CGI_PARAMS)
|
576
597
|
remove_const(:CGI_COOKIES)
|
@@ -606,13 +627,14 @@ class FCGI
|
|
606
627
|
yield ::CGI.new(*args)
|
607
628
|
else
|
608
629
|
exit_requested = false
|
609
|
-
FCGI::each
|
630
|
+
FCGI::each do |request|
|
631
|
+
|
610
632
|
$stdout, $stderr = request.out, request.err
|
611
|
-
|
633
|
+
|
612
634
|
yield CGI.new(request, *args)
|
613
635
|
|
614
636
|
request.finish
|
615
|
-
|
637
|
+
end
|
616
638
|
end
|
617
639
|
end
|
618
640
|
end
|
data/test/helper.rb
ADDED
data/test/test_fcgi.rb
ADDED
metadata
CHANGED
@@ -1,55 +1,66 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: fcgi
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.1
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
-
|
8
|
-
autorequire:
|
7
|
+
authors:
|
8
|
+
- mva
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
date:
|
12
|
-
default_executable:
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-20 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
description: FastCGI is a language independent, scalable, open extension to CGI that
|
15
|
+
provides high performance without the limitations of server specific APIs. This
|
16
|
+
version aims to be compatible with both 1.8.x and 1.9.x versions of Ruby, and also
|
17
|
+
will be ported to 2.0.x.
|
18
|
+
email: mva@mva.name
|
17
19
|
executables: []
|
18
|
-
|
19
|
-
extensions:
|
20
|
+
extensions:
|
20
21
|
- ext/fcgi/extconf.rb
|
21
|
-
extra_rdoc_files:
|
22
|
-
|
23
|
-
|
24
|
-
-
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.rdoc
|
25
|
+
- README.signals
|
26
|
+
files:
|
27
|
+
- VERSION
|
28
|
+
- ext/fcgi/MANIFEST
|
29
|
+
- ext/fcgi/Makefile
|
25
30
|
- ext/fcgi/extconf.rb
|
26
31
|
- ext/fcgi/fcgi.c
|
27
|
-
-
|
28
|
-
-
|
29
|
-
-
|
32
|
+
- lib/fcgi.rb
|
33
|
+
- fcgi.gemspec
|
34
|
+
- LICENSE
|
35
|
+
- README.rdoc
|
30
36
|
- README.signals
|
31
|
-
|
32
|
-
|
37
|
+
- test/helper.rb
|
38
|
+
- test/test_fcgi.rb
|
39
|
+
homepage: http://github.com/alphallc/ruby-fcgi-ng
|
33
40
|
licenses: []
|
34
|
-
|
35
41
|
post_install_message:
|
36
|
-
rdoc_options:
|
37
|
-
|
38
|
-
require_paths:
|
42
|
+
rdoc_options:
|
43
|
+
- --charset=UTF-8
|
44
|
+
require_paths:
|
39
45
|
- lib
|
40
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
required_rubygems_version:
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
47
58
|
requirements: []
|
48
|
-
|
49
|
-
|
50
|
-
rubygems_version: 1.3.5
|
59
|
+
rubyforge_project:
|
60
|
+
rubygems_version: 1.8.24
|
51
61
|
signing_key:
|
52
|
-
specification_version:
|
62
|
+
specification_version: 3
|
53
63
|
summary: FastCGI library for Ruby.
|
54
|
-
test_files:
|
55
|
-
|
64
|
+
test_files:
|
65
|
+
- test/helper.rb
|
66
|
+
- test/test_fcgi.rb
|
data/ChangeLog
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
Sun Jun 25 12:46:14 JST 2006 moonwolf@moonwolf.com
|
2
|
-
* patch from http://www.kbmj.com/tech/index.php?itemid=26
|
3
|
-
* patch from http://sean.treadway.info/articles/2005/12/24/open-season-for-eagain
|
4
|
-
|
5
|
-
Fri Apr 1 10:20:14 JST 2005 sugi@nemui.org
|
6
|
-
* Include errno.h
|
7
|
-
|
8
|
-
Fri Apr 1 08:09:13 JST 2005 aredridel@nbtsc.org
|
9
|
-
* Report actual errors
|
10
|
-
|
11
|
-
Adds reporting of errors fcgi experiences. Credit to David Heinemier Hansson
|
12
|
-
for discovery.
|
13
|
-
|
14
|
-
Fri Apr 1 08:08:07 JST 2005 aredridel@nbtsc.org
|
15
|
-
* FHS Include Paths
|
16
|
-
|
17
|
-
Wed Mar 30 21:45:11 JST 2005 sugi@nemui.org
|
18
|
-
* 16k+request-memleak
|
19
|
-
fix memory leak when 16k+/reqest.
|
20
|
-
from http://enigo.com/projects/iowa/fcgipatch.html
|
21
|
-
|
22
|
-
Wed Mar 30 21:43:02 JST 2005 sugi@nemui.org
|
23
|
-
* fix-check_stream_error
|
24
|
-
Simple fix in CHECK_STREAM_ERROR for Potential DoS
|
25
|
-
see http://groups-beta.google.com/group/comp.lang.ruby/browse_thread/thread/f51e79974a454b70/54fe207411e9eb05
|
26
|
-
for details.
|
27
|
-
|
28
|
-
Wed Mar 30 21:40:22 JST 2005 sugi@nemui.org
|
29
|
-
* init-from-0.8.5
|
30
|
-
Initalize DARCS repository from MoonWolf's 0.8.5 release.
|