Skip to content

Commit b6d8bcb

Browse files
authored
Merge pull request #523 from p8/rage/public
[rage] Serve static files from public
2 parents 538b484 + 9b22fad commit b6d8bcb

11 files changed

Lines changed: 193 additions & 272 deletions

File tree

frameworks/rage/app/controllers/benchmark_controller.rb

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,12 @@ class BenchmarkController < RageController::API
1010
if File.exist?(dataset_path)
1111
@dataset_items = JSON.parse(File.read(dataset_path))
1212
end
13+
def self.dataset_items = @dataset_items
1314

14-
# Load static files into memory
15-
MIME_TYPES = {
16-
'.css' => 'text/css',
17-
'.js' => 'application/javascript',
18-
'.html' => 'text/html',
19-
'.woff2' => 'font/woff2',
20-
'.svg' => 'image/svg+xml',
21-
'.webp' => 'image/webp',
22-
'.json' => 'application/json'
23-
}.freeze
24-
25-
static_dir = File.join DATA_DIR, 'static'
26-
@static_files_cache = {}
27-
if Dir.exist?(static_dir)
28-
Dir.foreach(static_dir) do |name|
29-
next if name == '.' || name == '..'
30-
path = File.join(static_dir, name)
31-
next unless File.file?(path)
32-
ext = File.extname(name)
33-
ct = MIME_TYPES.fetch(ext, 'application/octet-stream')
34-
@static_files_cache[name] = { data: File.binread(path), content_type: ct }
35-
end
36-
end
15+
FileUtils.cp_r(File.join(DATA_DIR, 'static'), File.join(Rage.root, 'public', 'static'))
3716

3817
PG_QUERY = 'SELECT id, name, category, price, quantity, active, tags, rating_score, rating_count FROM items WHERE price BETWEEN $1 AND $2 LIMIT $3'
3918

40-
def self.dataset_items = @dataset_items
41-
def self.static_files_cache = @static_files_cache
42-
4319
before_action do
4420
headers["server"] = "rage"
4521
end
@@ -126,15 +102,6 @@ def async_db
126102
render json: { items: items, count: items.length }
127103
end
128104

129-
def static_file
130-
if entry = self.class.static_files_cache[params[:filename]]
131-
headers['content-type'] = entry[:content_type]
132-
render plain: entry[:data]
133-
else
134-
head 404
135-
end
136-
end
137-
138105
def upload
139106
rack_input = request.send(:rack_request).env["rack.input"]
140107
rack_input.rewind

frameworks/rage/config/application.rb

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
Rage.configure do
99
# use this to add settings that are constant across all environments
10+
config.public_file_server.enabled = true
1011
end
1112

1213
require "rage/setup"
@@ -51,49 +52,3 @@ def self.prepare(env, url_params)
5152
raise Rage::Errors::BadRequest
5253
end
5354
end
54-
55-
# Monkey patch render to latest unreleased version.
56-
# This allow overriding the content-type for the static test.
57-
# https://github.com/rage-rb/rage/blob/1ce455a34f8548e7533184f7eae7e47ae2c64c72/lib/rage/controller/api.rb#L530-L567
58-
RageController::API.class_eval do
59-
DEFAULT_CONTENT_TYPE = "application/json; charset=utf-8"
60-
61-
def render(json: nil, plain: nil, sse: nil, status: nil)
62-
raise "Render was called multiple times in this action." if @__rendered
63-
@__rendered = true
64-
65-
if json || plain
66-
@__body << if json
67-
json.is_a?(String) ? json : json.to_json
68-
else
69-
ct = @__headers["content-type"]
70-
@__headers["content-type"] = "text/plain; charset=utf-8" if ct.nil? || ct == DEFAULT_CONTENT_TYPE
71-
plain.to_s
72-
end
73-
74-
@__status = 200
75-
end
76-
77-
if status
78-
@__status = if status.is_a?(Symbol)
79-
::Rack::Utils::SYMBOL_TO_STATUS_CODE[status]
80-
else
81-
status
82-
end
83-
end
84-
85-
if sse
86-
raise ArgumentError, "Cannot render both a standard body and an SSE stream." unless @__body.empty?
87-
88-
if status
89-
return if @__status == 204
90-
raise ArgumentError, "SSE responses only support 200 and 204 statuses." if @__status != 200
91-
end
92-
93-
@__env["rack.upgrade?"] = :sse
94-
@__env["rack.upgrade"] = Rage::SSE::Application.new(sse)
95-
@__status = 200
96-
@__headers["content-type"] = "text/event-stream; charset=utf-8"
97-
end
98-
end
99-
end

frameworks/rage/config/routes.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
get '/json/:count', to: 'benchmark#json_endpoint'
77
get '/async-db', to: 'benchmark#async_db'
88
post '/upload', to: 'benchmark#upload'
9-
get '/static/:filename', to: 'benchmark#static_file'
109

1110
# Catch-all for unknown paths → 404
1211
get '*', to: 'benchmark#not_found'

frameworks/rage/public/.gitkeep

Whitespace-only changes.

site/data/current.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"docker": "29.3.0",
1111
"commit": "6eef1b4f",
1212
"governor": "performance",
13-
"docker_runtime": "runc",
13+
"commit": "d6ba7775",
1414
"tcp": {
1515
"lo_mtu": "1500",
1616
"congestion": "cubic",

site/data/static-1024.json

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -381,19 +381,18 @@
381381
{
382382
"framework": "rage",
383383
"language": "Ruby",
384-
"rps": 94201,
385-
"avg_latency": "11.13ms",
386-
"p99_latency": "11.13ms",
387-
"cpu": "8272.6%",
388-
"memory": "4.7GiB",
384+
"rps": 993470,
385+
"avg_latency": "1.09ms",
386+
"p99_latency": "1.09ms",
387+
"cpu": "6510.2%",
388+
"memory": "3.6GiB",
389389
"connections": 1024,
390390
"threads": 64,
391391
"duration": "5s",
392392
"pipeline": 1,
393-
"bandwidth": "5.59GB",
394-
"input_bw": "",
393+
"bandwidth": "17.05GB",
395394
"reconnects": 0,
396-
"status_2xx": 480457,
395+
"status_2xx": 5024837,
397396
"status_3xx": 0,
398397
"status_4xx": 0,
399398
"status_5xx": 0

site/data/static-4096.json

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -381,19 +381,18 @@
381381
{
382382
"framework": "rage",
383383
"language": "Ruby",
384-
"rps": 92213,
385-
"avg_latency": "43.53ms",
386-
"p99_latency": "43.53ms",
387-
"cpu": "7315.3%",
388-
"memory": "4.6GiB",
384+
"rps": 961904,
385+
"avg_latency": "4.20ms",
386+
"p99_latency": "4.20ms",
387+
"cpu": "6438.4%",
388+
"memory": "3.6GiB",
389389
"connections": 4096,
390390
"threads": 64,
391391
"duration": "5s",
392392
"pipeline": 1,
393-
"bandwidth": "5.47GB",
394-
"input_bw": "",
393+
"bandwidth": "16.51GB",
395394
"reconnects": 0,
396-
"status_2xx": 471281,
395+
"status_2xx": 4873051,
397396
"status_3xx": 0,
398397
"status_4xx": 0,
399398
"status_5xx": 0

site/data/static-6800.json

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -381,19 +381,18 @@
381381
{
382382
"framework": "rage",
383383
"language": "Ruby",
384-
"rps": 90191,
385-
"avg_latency": "70.64ms",
386-
"p99_latency": "70.64ms",
387-
"cpu": "7352.9%",
388-
"memory": "4.8GiB",
384+
"rps": 927358,
385+
"avg_latency": "7.06ms",
386+
"p99_latency": "7.06ms",
387+
"cpu": "6388.9%",
388+
"memory": "3.7GiB",
389389
"connections": 6800,
390390
"threads": 64,
391391
"duration": "5s",
392392
"pipeline": 1,
393-
"bandwidth": "5.35GB",
394-
"input_bw": "",
393+
"bandwidth": "15.92GB",
395394
"reconnects": 0,
396-
"status_2xx": 461743,
395+
"status_2xx": 4674291,
397396
"status_3xx": 0,
398397
"status_4xx": 0,
399398
"status_5xx": 0
Lines changed: 55 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
INFO: Listening on port 8080
2+
INFO: Serving static files from /app/public
23
INFO: Starting up Iodine:
34
* Iodine 5.2.1
45
* Ruby 4.0.2
@@ -23,44 +24,44 @@ INFO: 39 is running.
2324
INFO: 44 is running.
2425
INFO: 49 is running.
2526
INFO: 55 is running.
26-
INFO: 63 is running.
27-
INFO: 68 is running.
28-
INFO: 72 is running.
29-
INFO: 76 is running.
30-
INFO: 80 is running.
27+
INFO: 60 is running.
28+
INFO: 69 is running.
29+
INFO: 73 is running.
30+
INFO: 77 is running.
31+
INFO: 81 is running.
3132
INFO: 85 is running.
3233
INFO: 90 is running.
3334
INFO: 95 is running.
3435
INFO: 100 is running.
3536
INFO: 105 is running.
3637
INFO: 110 is running.
3738
INFO: 115 is running.
38-
INFO: 120 is running.
39+
INFO: 121 is running.
3940
INFO: 126 is running.
4041
INFO: 131 is running.
4142
INFO: 136 is running.
4243
INFO: 141 is running.
4344
INFO: 146 is running.
4445
INFO: 151 is running.
45-
INFO: 157 is running.
46-
INFO: 161 is running.
47-
INFO: 166 is running.
46+
INFO: 156 is running.
47+
INFO: 160 is running.
48+
INFO: 165 is running.
4849
INFO: 170 is running.
4950
INFO: 176 is running.
50-
INFO: 181 is running.
51-
INFO: 186 is running.
52-
INFO: 191 is running.
51+
INFO: 182 is running.
52+
INFO: 187 is running.
53+
INFO: 192 is running.
5354
INFO: 196 is running.
54-
INFO: 200 is running.
55-
INFO: 205 is running.
56-
INFO: 210 is running.
55+
INFO: 201 is running.
56+
INFO: 206 is running.
57+
INFO: 211 is running.
5758
INFO: 216 is running.
5859
INFO: 221 is running.
5960
INFO: 226 is running.
60-
INFO: 230 is running.
61-
INFO: 235 is running.
62-
INFO: 240 is running.
63-
INFO: 245 is running.
61+
INFO: 231 is running.
62+
INFO: 236 is running.
63+
INFO: 241 is running.
64+
INFO: 246 is running.
6465
INFO: 251 is running.
6566
INFO: 256 is running.
6667
INFO: 261 is running.
@@ -70,7 +71,7 @@ INFO: 276 is running.
7071
INFO: 281 is running.
7172
INFO: 286 is running.
7273
INFO: 291 is running.
73-
INFO: 299 is running.
74+
INFO: 298 is running.
7475
INFO: 303 is running.
7576
INFO: 307 is running.
7677
INFO: 311 is running.
@@ -79,16 +80,16 @@ INFO: 321 is running.
7980
INFO: 326 is running.
8081
INFO: 331 is running.
8182
INFO: 336 is running.
82-
INFO: 344 is running.
83-
INFO: 348 is running.
84-
INFO: 352 is running.
83+
INFO: 341 is running.
84+
INFO: 349 is running.
85+
INFO: 353 is running.
8586
INFO: 357 is running.
86-
INFO: 361 is running.
87-
INFO: 366 is running.
88-
INFO: 371 is running.
89-
INFO: 376 is running.
90-
INFO: 382 is running.
91-
INFO: 387 is running.
87+
INFO: 362 is running.
88+
INFO: 367 is running.
89+
INFO: 373 is running.
90+
INFO: 378 is running.
91+
INFO: 383 is running.
92+
INFO: 388 is running.
9293
INFO: 392 is running.
9394
INFO: 397 is running.
9495
INFO: 402 is running.
@@ -110,32 +111,32 @@ INFO: 477 is running.
110111
INFO: 482 is running.
111112
INFO: 487 is running.
112113
INFO: 492 is running.
113-
INFO: 503 is running.
114-
INFO: 511 is running.
114+
INFO: 497 is running.
115+
INFO: 502 is running.
115116
INFO: 507 is running.
116-
INFO: 520 is running.
117-
INFO: 515 is running.
118-
INFO: 498 is running.
119-
INFO: 524 is running.
120-
INFO: 530 is running.
121-
INFO: 535 is running.
122-
INFO: 540 is running.
123-
INFO: 551 is running.
124-
INFO: 545 is running.
125-
INFO: 560 is running.
126-
INFO: 556 is running.
127-
INFO: 566 is running.
128-
INFO: 571 is running.
117+
INFO: 512 is running.
118+
INFO: 517 is running.
119+
INFO: 522 is running.
120+
INFO: 527 is running.
121+
INFO: 532 is running.
122+
INFO: 537 is running.
123+
INFO: 542 is running.
124+
INFO: 547 is running.
125+
INFO: 552 is running.
126+
INFO: 557 is running.
127+
INFO: 562 is running.
128+
INFO: 567 is running.
129+
INFO: 572 is running.
130+
INFO: 577 is running.
129131
INFO: 582 is running.
130-
INFO: 576 is running.
131-
INFO: 591 is running.
132-
INFO: 586 is running.
133-
INFO: 600 is running.
134-
INFO: 595 is running.
135-
INFO: 611 is running.
136-
INFO: 606 is running.
137-
INFO: 617 is running.
138-
INFO: 621 is running.
132+
INFO: 587 is running.
133+
INFO: 592 is running.
134+
INFO: 597 is running.
135+
INFO: 602 is running.
136+
INFO: 607 is running.
137+
INFO: 613 is running.
138+
INFO: 618 is running.
139+
INFO: 622 is running.
139140
INFO: 627 is running.
140-
INFO: 637 is running.
141141
INFO: 632 is running.
142+
INFO: 637 is running.

0 commit comments

Comments
 (0)