fcgiwrap 0.1.5

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.
Files changed (4) hide show
  1. data/ChangeLog +7 -0
  2. data/README +41 -0
  3. data/lib/fcgiwrap.rb +87 -0
  4. metadata +56 -0
data/ChangeLog ADDED
@@ -0,0 +1,7 @@
1
+ 06-10-16 Tatsuki Sugiura <sugi@nemui.org>
2
+
3
+ * release 0.1.5
4
+ * add gemspec
5
+ * fix typo in Kernel.print wrapper.
6
+ Thanks for YAMAGUCHI Seiji <valda at underscore.jp>
7
+
data/README ADDED
@@ -0,0 +1,41 @@
1
+
2
+ FastCGI Wrapper for ruby
3
+ - a trick to wrap CGI in FastCGI easily
4
+
5
+ Author: Tatsuki Sugiura <sugi@nemui.org>
6
+
7
+ Licence: Ruby's
8
+
9
+ Install:
10
+
11
+ Just copy fcgiwrap.rb to ruby's libdir or cgi's current directory.
12
+
13
+ Description:
14
+
15
+ This library was written for wrapping CGI to FastCGI without
16
+ modification.
17
+
18
+ FCGIWrap provides just FCGIWrap.each method. The method receives
19
+ a block and call it for each fcgi request. In this loop, CGI::new()
20
+ was overrided, then it will return instance of fcgi.
21
+
22
+ Usage:
23
+
24
+ Write a wrapper script.
25
+ If you want to wrap foo.cgi, write foo.fcgi like following;
26
+
27
+ ------
28
+ #!/usr/bin/ruby
29
+ require 'fcgiwrap'
30
+ FCGIWrap.each {
31
+ load '/path/to/foo.cgi'
32
+ }
33
+ ------
34
+
35
+ Limitation:
36
+
37
+ Currently, FCGIWrap can not support some CGIs;
38
+ - using global variable without initialization
39
+ - substitution of constant in main routine of cgi
40
+ (ruby will output warning).
41
+
data/lib/fcgiwrap.rb ADDED
@@ -0,0 +1,87 @@
1
+ #
2
+ # FastCGI Wrapper
3
+ # trick to wrap a cgi in fastcgi easily
4
+ #
5
+ # Author: Tatsuki Sugiura <sugi@nemui.org>
6
+ # Licence: Ruby's
7
+ #
8
+ #
9
+ # Usage:
10
+ # write wrapper script like following;
11
+ # require 'fcgiwrap'
12
+ # FCGIWrap.each {
13
+ # load '/path/to/original.cgi'
14
+ # }
15
+
16
+ require 'cgi'
17
+ require 'fcgi'
18
+
19
+ # for ruby 1.8 blow
20
+ if RUBY_VERSION.tr(".", "0").to_i < 10801
21
+ alias $stdout $defout
22
+ def ENV.clear
23
+ ENV.each_key {|k| ENV.delete(k) }
24
+ end
25
+ def ENV.update(from)
26
+ from.each {|k,v| ENV[k] = v}
27
+ end
28
+ end
29
+
30
+ class FCGIWrap
31
+ VERSION = "0.1.5"
32
+ @@cgi = nil
33
+ @@shutdown = false
34
+ class << self
35
+ def cgi
36
+ @@cgi
37
+ end
38
+
39
+ def each_request
40
+ trap(:PIPE){ exit }
41
+ trap(:TERM){ @@cgi ? (@@shutdown = true) : exit }
42
+ trap(:INT){ @@cgi ? (@@shutdown = true) : exit }
43
+ FCGI.each_cgi { |@@cgi|
44
+ ENV.clear
45
+ ENV.update(@@cgi.env_table)
46
+ begin
47
+ yield
48
+ rescue SystemExit
49
+ @@shutdown && raise
50
+ ensure
51
+ @@cgi = nil
52
+ #Thread.list.each { |t|
53
+ # Thread.current == t and next
54
+ # t.kill
55
+ #}
56
+ end
57
+ @@shutdown && exit
58
+ }
59
+ end
60
+ alias each each_request
61
+ alias each_cgi each_request
62
+ alias loop each_request
63
+ end
64
+ end
65
+
66
+ module Kernel
67
+ def print(*args)
68
+ if FCGIWrap.cgi
69
+ FCGIWrap.cgi.print(*args)
70
+ else
71
+ # IGNORE:
72
+ # STDERR.puts "WARN: Useless print"
73
+ end
74
+ end
75
+ def puts(*args)
76
+ Kernel.print(*args.map{|s| t = s.dup.to_s; t !~ /\n$/ and t += "\n"; t })
77
+ end
78
+ end
79
+
80
+ class CGI
81
+ class << self
82
+ def new(*args)
83
+ FCGIWrap.cgi ? FCGIWrap.cgi : super(*args)
84
+ end
85
+ end
86
+ end
87
+
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
4
+ name: fcgiwrap
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.5
7
+ date: 2006-10-16 00:00:00 +09:00
8
+ summary: A trick to wrap CGI in FastCGI easily
9
+ require_paths:
10
+ - lib
11
+ email: sugi@nemui.org
12
+ homepage:
13
+ rubyforge_project:
14
+ description:
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Tatsuki Sugiura
31
+ files:
32
+ - lib/fcgiwrap.rb
33
+ - README
34
+ - ChangeLog
35
+ test_files: []
36
+
37
+ rdoc_options: []
38
+
39
+ extra_rdoc_files:
40
+ - README
41
+ executables: []
42
+
43
+ extensions: []
44
+
45
+ requirements: []
46
+
47
+ dependencies:
48
+ - !ruby/object:Gem::Dependency
49
+ name: fcgi
50
+ version_requirement:
51
+ version_requirements: !ruby/object:Gem::Version::Requirement
52
+ requirements:
53
+ - - ">"
54
+ - !ruby/object:Gem::Version
55
+ version: 0.0.0
56
+ version: