knjappserver 0.0.19 → 0.0.20
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/VERSION +1 -1
- data/knjappserver.gemspec +3 -2
- data/lib/conf/apache2_cgi_rhtml_conf.conf +11 -0
- data/lib/files/database_schema.rb +3 -1
- data/lib/include/class_httpserver.rb +7 -4
- data/lib/include/class_httpsession_contentgroup.rb +1 -1
- data/lib/include/class_knjappserver_logging.rb +17 -2
- data/lib/include/class_knjappserver_web.rb +5 -0
- data/lib/include/class_log.rb +10 -6
- data/lib/include/class_log_data_value.rb +1 -2
- data/lib/include/class_log_link.rb +3 -3
- data/lib/include/gettext_funcs.rb +15 -5
- data/lib/scripts/knjappserver_cgi.rb +104 -20
- metadata +22 -21
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.20
|
data/knjappserver.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{knjappserver}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.20"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date = %q{2012-03-
|
12
|
+
s.date = %q{2012-03-16}
|
13
13
|
s.description = %q{Which supports a lot of undocumented stuff.}
|
14
14
|
s.email = %q{k@spernj.org}
|
15
15
|
s.executables = ["check_running.rb", "knjappserver_start.rb"]
|
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
"bin/knjappserver_start.rb",
|
31
31
|
"knjappserver.gemspec",
|
32
32
|
"lib/conf/README",
|
33
|
+
"lib/conf/apache2_cgi_rhtml_conf.conf",
|
33
34
|
"lib/conf/conf_example.rb",
|
34
35
|
"lib/conf/conf_vars_example.rb",
|
35
36
|
"lib/files/database_schema.rb",
|
@@ -0,0 +1,11 @@
|
|
1
|
+
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
|
2
|
+
|
3
|
+
<Files *.fcgi>
|
4
|
+
Options ExecCGI
|
5
|
+
AddHandler fastcgi-script .fcgi
|
6
|
+
</Files>
|
7
|
+
|
8
|
+
<Files *.rhtml>
|
9
|
+
AddType application/x-httpd-knj .rhtml
|
10
|
+
Action application/x-httpd-knj "/cgi-bin/knjappserver_cgi.rb"
|
11
|
+
</Files>
|
@@ -14,6 +14,8 @@ class Knjappserver
|
|
14
14
|
{"name" => "cookie_values_data_id", "type" => "bigint"},
|
15
15
|
{"name" => "meta_keys_data_id", "type" => "bigint"},
|
16
16
|
{"name" => "meta_values_data_id", "type" => "bigint"},
|
17
|
+
{"name" => "session_keys_data_id", "type" => "bigint"},
|
18
|
+
{"name" => "session_values_data_id", "type" => "bigint"},
|
17
19
|
{"name" => "tag_data_id", "type" => "bigint"},
|
18
20
|
{"name" => "comment_data_id", "type" => "bigint"}
|
19
21
|
],
|
@@ -91,7 +93,7 @@ class Knjappserver
|
|
91
93
|
{"name" => "idhash", "type" => "varchar"},
|
92
94
|
{"name" => "sess_data", "type" => "text"},
|
93
95
|
{"name" => "date_added", "type" => "datetime"},
|
94
|
-
{"name" => "date_lastused", "type" => "datetime", "on_created" => proc{|d| d["db"].query("UPDATE Session SET date_lastused = '#{Knj::Datet.new.dbstr}")}},
|
96
|
+
{"name" => "date_lastused", "type" => "datetime", "on_created" => proc{|d| d["db"].query("UPDATE Session SET date_lastused = '#{Knj::Datet.new.dbstr}'")}},
|
95
97
|
{"name" => "ip", "type" => "varchar", "maxlength" => 15},
|
96
98
|
{"name" => "user_agent", "type" => "text"},
|
97
99
|
{"name" => "remember", "type" => "enum", "maxlength" => "'0','1'", "default" => 0, "comment" => "If the session should be remembered or not."}
|
@@ -28,10 +28,13 @@ class Knjappserver::Httpserver
|
|
28
28
|
self.spawn_httpsession(@server.accept)
|
29
29
|
STDOUT.print "Starting new HTTP-request.\n" if @debug
|
30
30
|
rescue => e
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
if @debug
|
32
|
+
STDOUT.puts e.inspect
|
33
|
+
STDOUT.puts e.backtrace
|
34
|
+
STDOUT.print "\n"
|
35
|
+
STDOUT.print "Could not accept HTTP-request - waiting 1 sec and then trying again.\n"
|
36
|
+
end
|
37
|
+
|
35
38
|
sleep 1
|
36
39
|
end
|
37
40
|
end
|
@@ -70,7 +70,7 @@ class Knjappserver::Httpsession::Contentgroup
|
|
70
70
|
def write_begin
|
71
71
|
begin
|
72
72
|
@resp.write if @httpsession.meta["METHOD"] != "HEAD"
|
73
|
-
rescue Errno::ECONNRESET, Errno::ENOTCONN, Errno::EPIPE
|
73
|
+
rescue Errno::ECONNRESET, Errno::ENOTCONN, Errno::EPIPE
|
74
74
|
#Ignore - the user probaly left.
|
75
75
|
end
|
76
76
|
end
|
@@ -195,11 +195,20 @@ class Knjappserver
|
|
195
195
|
|
196
196
|
#Writes a custom log to the database.
|
197
197
|
def log(msg, objs, args = {})
|
198
|
+
#This can come in handy if migrating logs to appserver-database.
|
199
|
+
if args[:date_saved]
|
200
|
+
date_saved = args[:date_saved]
|
201
|
+
else
|
202
|
+
date_saved = Time.now
|
203
|
+
end
|
204
|
+
|
205
|
+
objs = [objs] if !objs.is_a?(Array)
|
206
|
+
|
198
207
|
@logs_mutex.synchronize do
|
199
|
-
objs = [objs] if !objs.is_a?(Array)
|
200
208
|
log_value_id = @ob.static(:Log_data_value, :force_id, msg)
|
209
|
+
|
201
210
|
ins_data = {
|
202
|
-
:date_saved =>
|
211
|
+
:date_saved => date_saved,
|
203
212
|
:text_value_id => log_value_id
|
204
213
|
}
|
205
214
|
|
@@ -227,6 +236,12 @@ class Knjappserver
|
|
227
236
|
ins_data[:meta_values_data_id] = meta_hash[:values_data_id]
|
228
237
|
end
|
229
238
|
|
239
|
+
session_hash = log_hash_ins(_session) if _session
|
240
|
+
if session_hash
|
241
|
+
ins_data[:session_keys_data_id] = session_hash[:keys_data_id]
|
242
|
+
ins_data[:session_values_data_id] = session_hash[:values_data_id]
|
243
|
+
end
|
244
|
+
|
230
245
|
if args[:tag]
|
231
246
|
tag_value_id = @ob.static(:Log_data_value, :force_id, args[:tag])
|
232
247
|
ins_data[:tag_data_id] = tag_value_id
|
@@ -1,6 +1,10 @@
|
|
1
1
|
class Knjappserver
|
2
2
|
#Imports a .rhtml-file and executes it.
|
3
3
|
def import(filepath)
|
4
|
+
if filepath.to_s.index("../proc/self") != nil
|
5
|
+
raise Knj::Errors::NoAccess, "Possible attempt to hack the appserver."
|
6
|
+
end
|
7
|
+
|
4
8
|
_httpsession.eruby.import(filepath)
|
5
9
|
end
|
6
10
|
|
@@ -122,6 +126,7 @@ class Knjappserver
|
|
122
126
|
|
123
127
|
#Returns the socket-port the appserver is currently running on.
|
124
128
|
def port
|
129
|
+
raise "Http-server not spawned yet. Call Knjappserver#start to spawn it." if !@httpserv
|
125
130
|
return @httpserv.server.addr[1]
|
126
131
|
end
|
127
132
|
end
|
data/lib/include/class_log.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
class Knjappserver::Log < Knj::Datarow
|
2
|
-
|
2
|
+
has_many [
|
3
|
+
{:class => :Log_link, :col => :log_id, :method => :links, :depends => true, :autodelete => true}
|
4
|
+
]
|
5
|
+
|
6
|
+
def self.list(d, &block)
|
3
7
|
sql = "SELECT #{table}.* FROM #{table}"
|
4
8
|
|
5
9
|
if d.args["object_lookup"]
|
@@ -30,7 +34,7 @@ class Knjappserver::Log < Knj::Datarow
|
|
30
34
|
sql << ret[:sql_order]
|
31
35
|
sql << ret[:sql_limit]
|
32
36
|
|
33
|
-
return d.ob.list_bysql(:Log, sql)
|
37
|
+
return d.ob.list_bysql(:Log, sql, &block)
|
34
38
|
end
|
35
39
|
|
36
40
|
def self.add(d)
|
@@ -71,6 +75,10 @@ class Knjappserver::Log < Knj::Datarow
|
|
71
75
|
ob.args[:knjappserver].log_data_hash(self[:meta_keys_data_id], self[:meta_values_data_id])
|
72
76
|
end
|
73
77
|
|
78
|
+
def session
|
79
|
+
ob.args[:knjappserver].log_data_hash(self[:session_keys_data_id], self[:session_values_data_id])
|
80
|
+
end
|
81
|
+
|
74
82
|
def ip
|
75
83
|
meta_d = self.meta
|
76
84
|
|
@@ -83,10 +91,6 @@ class Knjappserver::Log < Knj::Datarow
|
|
83
91
|
lines = self.text.to_s.split("\n").first.to_s
|
84
92
|
end
|
85
93
|
|
86
|
-
def links(args = {})
|
87
|
-
return ob.list(:Log_link, {"log" => self}.merge(args))
|
88
|
-
end
|
89
|
-
|
90
94
|
def objects_html(ob_use)
|
91
95
|
html = ""
|
92
96
|
first = true
|
@@ -12,8 +12,7 @@ class Knjappserver::Log_data_value < Knj::Datarow
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.force_id(d, value)
|
15
|
-
|
16
|
-
while d_val = q_val.fetch
|
15
|
+
d.db.select(:Log_data_value, {"value" => value}) do |d_val|
|
17
16
|
return d_val[:id].to_i if d_val[:value].to_s == value.to_s #MySQL doesnt take upper/lower-case into consideration because value is a text-column... lame! - knj
|
18
17
|
end
|
19
18
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
class Knjappserver::Log_link < Knj::Datarow
|
2
2
|
has_one [
|
3
|
-
{:class => :Log, :col => :log_id}
|
3
|
+
{:class => :Log, :col => :log_id, :method => :log}
|
4
4
|
]
|
5
5
|
|
6
|
-
def self.list(d)
|
6
|
+
def self.list(d, &block)
|
7
7
|
sql = "SELECT * FROM #{table} WHERE 1=1"
|
8
8
|
|
9
9
|
ret = list_helper(d)
|
@@ -22,7 +22,7 @@ class Knjappserver::Log_link < Knj::Datarow
|
|
22
22
|
sql << ret[:sql_order]
|
23
23
|
sql << ret[:sql_limit]
|
24
24
|
|
25
|
-
return d.ob.list_bysql(:Log_link, sql)
|
25
|
+
return d.ob.list_bysql(:Log_link, sql, &block)
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.add(d)
|
@@ -3,10 +3,20 @@
|
|
3
3
|
def _(str)
|
4
4
|
kas = _kas
|
5
5
|
session = _session
|
6
|
+
locale = nil
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
if Thread.current[:locale].to_s.length > 0
|
9
|
+
locale = Thread.current[:locale]
|
10
|
+
elsif session and session[:locale].to_s.strip.length > 0
|
11
|
+
locale = session[:locale]
|
12
|
+
elsif kas and kas.config[:locale_default].to_s.strip.length > 0
|
13
|
+
session[:locale] = kas.config[:locale_default] if session
|
14
|
+
locale = kas.config[:locale_default]
|
15
|
+
elsif !session and !kas
|
16
|
+
return str
|
17
|
+
else
|
18
|
+
raise "No locale set for session and ':locale_default' not set in config."
|
19
|
+
end
|
20
|
+
|
21
|
+
return kas.gettext.trans(locale, str)
|
12
22
|
end
|
@@ -6,6 +6,45 @@ time_begin = Time.now
|
|
6
6
|
#Good for programming appserver-supported projects without running an appserver all the time,
|
7
7
|
#but really slow because of startup for every request.
|
8
8
|
|
9
|
+
class Cgi_is_retarded
|
10
|
+
def env_table
|
11
|
+
return ENV
|
12
|
+
end
|
13
|
+
|
14
|
+
def request_method
|
15
|
+
return ENV["REQUEST_METHOD"]
|
16
|
+
end
|
17
|
+
|
18
|
+
def content_type
|
19
|
+
return ENV["CONTENT_TYPE"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def cgi
|
23
|
+
@cgi = CGI.new if !@cgi
|
24
|
+
return @cgi
|
25
|
+
end
|
26
|
+
|
27
|
+
def params
|
28
|
+
return self.cgi.params
|
29
|
+
end
|
30
|
+
|
31
|
+
def print(arg)
|
32
|
+
Kernel.print arg.to_s
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Knjappserver
|
37
|
+
def self.convert_fcgi_post(params)
|
38
|
+
post_hash = {}
|
39
|
+
|
40
|
+
params.each do |key, val|
|
41
|
+
post_hash[key] = val.first
|
42
|
+
end
|
43
|
+
|
44
|
+
return post_hash
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
9
48
|
begin
|
10
49
|
require "knj/autoload"
|
11
50
|
require "#{File.dirname(Knj::Os.realpath(__FILE__))}/../knjappserver.rb"
|
@@ -19,23 +58,15 @@ begin
|
|
19
58
|
raise "No 'Knjappserver::CGI_CONF'-constant was spawned by '#{ENV["HTTP_KNJAPPSERVER_CGI_CONFIG"]}'."
|
20
59
|
end
|
21
60
|
|
22
|
-
|
23
|
-
|
24
|
-
ENV.each do |key, val|
|
25
|
-
if key[0, 5] == "HTTP_" and key != "HTTP_KNJAPPSERVER_CGI_CONFIG"
|
26
|
-
key = Knj::Php.ucwords(key[5, key.length].gsub("_", " ")).gsub(" ", "-")
|
27
|
-
headers[key] = val
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
knjappserver_conf = Knjappserver::CGI_CONF["knjappserver"].merge(
|
61
|
+
#Spawn appserver.
|
62
|
+
knjappserver_conf = {
|
32
63
|
:cmdline => false,
|
33
64
|
:events => false,
|
34
65
|
:cleaner => false,
|
35
66
|
:dbrev => false,
|
36
67
|
:mail_require => false,
|
37
68
|
:port => 0 #Ruby picks random port and we get the actual port after starting the appserver.
|
38
|
-
)
|
69
|
+
}.merge(Knjappserver::CGI_CONF["knjappserver"])
|
39
70
|
knjappserver = Knjappserver.new(knjappserver_conf)
|
40
71
|
knjappserver.start
|
41
72
|
port = knjappserver.port
|
@@ -44,16 +75,69 @@ begin
|
|
44
75
|
#Make request.
|
45
76
|
http = Knj::Http2.new(:host => "localhost", :port => port)
|
46
77
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
78
|
+
|
79
|
+
#Spawn CGI-variable to emulate FCGI part.
|
80
|
+
cgi = Cgi_is_retarded.new
|
81
|
+
|
82
|
+
|
83
|
+
#The rest is copied from the FCGI-part.
|
84
|
+
headers = {}
|
85
|
+
cgi.env_table.each do |key, val|
|
86
|
+
if key[0, 5] == "HTTP_" and key != "HTTP_KNJAPPSERVER_CGI_CONFIG"
|
87
|
+
key = Knj::Php.ucwords(key[5, key.length].gsub("_", " ")).gsub(" ", "-")
|
88
|
+
headers[key] = val
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
#Make request.
|
93
|
+
if cgi.env_table["PATH_INFO"].length > 0 and cgi.env_table["PATH_INFO"] != "/"
|
94
|
+
url = cgi.env_table["PATH_INFO"][1, cgi.env_table["PATH_INFO"].length]
|
95
|
+
else
|
96
|
+
url = "index.rhtml"
|
97
|
+
end
|
98
|
+
|
99
|
+
if cgi.env_table["QUERY_STRING"].to_s.length > 0
|
100
|
+
url << "?#{cgi.env_table["QUERY_STRING"]}"
|
101
|
+
end
|
102
|
+
|
103
|
+
#cgi.print "Content-Type: text/html\r\n"
|
104
|
+
#cgi.print "\r\n"
|
105
|
+
#cgi.print Knj::Php.print_r(cgi.params, true)
|
106
|
+
|
107
|
+
if cgi.request_method == "POST" and cgi.content_type.to_s.downcase.index("multipart/form-data") != nil
|
108
|
+
count = 0
|
109
|
+
http.post_multipart(url, Knjappserver.convert_fcgi_post(cgi.params), {
|
110
|
+
:default_headers => headers,
|
111
|
+
:cookies => false,
|
112
|
+
:on_content => proc{|line|
|
113
|
+
cgi.print(line) if count > 0
|
114
|
+
count += 1
|
115
|
+
}
|
116
|
+
})
|
117
|
+
elsif cgi.request_method == "POST"
|
118
|
+
count = 0
|
119
|
+
http.post(url, Knjappserver.convert_fcgi_post(cgi.params), {
|
120
|
+
:default_headers => headers,
|
121
|
+
:cookies => false,
|
122
|
+
:on_content => proc{|line|
|
123
|
+
cgi.print(line) if count > 0
|
124
|
+
count += 1
|
125
|
+
}
|
126
|
+
})
|
127
|
+
else
|
128
|
+
count = 0
|
129
|
+
http.get(url, {
|
130
|
+
:default_headers => headers,
|
131
|
+
:cookies => false,
|
132
|
+
:on_content => proc{|line|
|
133
|
+
cgi.print(line) if count > 0
|
134
|
+
count += 1
|
135
|
+
}
|
136
|
+
})
|
137
|
+
end
|
56
138
|
rescue Exception => e
|
139
|
+
knjappserver.stop
|
140
|
+
|
57
141
|
print "Content-Type: text/html\r\n"
|
58
142
|
print "\n\n"
|
59
143
|
print Knj::Errors.error_str(e, {:html => true})
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knjappserver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-16 00:00:00.000000000 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: knjrbfw
|
17
|
-
requirement: &
|
17
|
+
requirement: &12366780 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *12366780
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: erubis
|
28
|
-
requirement: &
|
28
|
+
requirement: &12365600 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *12365600
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: mail
|
39
|
-
requirement: &
|
39
|
+
requirement: &12365060 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *12365060
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rspec
|
50
|
-
requirement: &
|
50
|
+
requirement: &12364340 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ~>
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: 2.3.0
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *12364340
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: bundler
|
61
|
-
requirement: &
|
61
|
+
requirement: &12363160 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: 1.0.0
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *12363160
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: jeweler
|
72
|
-
requirement: &
|
72
|
+
requirement: &12362140 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ~>
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: 1.6.3
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *12362140
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: rcov
|
83
|
-
requirement: &
|
83
|
+
requirement: &12352800 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *12352800
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: sqlite3
|
94
|
-
requirement: &
|
94
|
+
requirement: &12352260 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,10 +99,10 @@ dependencies:
|
|
99
99
|
version: '0'
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *12352260
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: json
|
105
|
-
requirement: &
|
105
|
+
requirement: &12351520 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|
108
108
|
- - ! '>='
|
@@ -110,7 +110,7 @@ dependencies:
|
|
110
110
|
version: '0'
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *12351520
|
114
114
|
description: Which supports a lot of undocumented stuff.
|
115
115
|
email: k@spernj.org
|
116
116
|
executables:
|
@@ -133,6 +133,7 @@ files:
|
|
133
133
|
- bin/knjappserver_start.rb
|
134
134
|
- knjappserver.gemspec
|
135
135
|
- lib/conf/README
|
136
|
+
- lib/conf/apache2_cgi_rhtml_conf.conf
|
136
137
|
- lib/conf/conf_example.rb
|
137
138
|
- lib/conf/conf_vars_example.rb
|
138
139
|
- lib/files/database_schema.rb
|
@@ -206,7 +207,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
206
207
|
version: '0'
|
207
208
|
segments:
|
208
209
|
- 0
|
209
|
-
hash:
|
210
|
+
hash: 894779464839235539
|
210
211
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
212
|
none: false
|
212
213
|
requirements:
|