svelte-on-rails 23.1.0 → 23.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 26d47863e0d0203a1e3eb22d690621ec1710f24b2f6e6808af0bebb159e8c658
4
- data.tar.gz: bda202fb4a438357d2d50d74caf97cb1aa9bc8b4408b7adb758dd9b2c3e50476
3
+ metadata.gz: e1ab30669578fe29fb245c12c41a0b3b25d14771ee678ea57b369fd0fdd3c9bd
4
+ data.tar.gz: 13abe226046b6277b1c25f088fd0ed1997e4e57d5ae3f758575b55561c5f9372
5
5
  SHA512:
6
- metadata.gz: 44513e768c709b976ec016a2381a95565b6d933da6a9fe4d81fcc534e2e35ec5a4a6a76cb1fae659b0eb54531468a9e8c940cb3648f8465b120b6eca780b4a37
7
- data.tar.gz: d4c83202c7c4137c715fa54cd1ca6f80a7be1be2bc71291a6a6e15b66fd47e36d642752a94e98e26d1b2ce49eb6a890822c8f01bb2568488dbe631bb502eb8fa
6
+ metadata.gz: 1f0276d33017984819175f07c6203858a98ce736039988cbed471be00f537e5b9827428776c2df29f5594a028cad5e5399c24c0b50e6493cb81e00cf2dd7f657
7
+ data.tar.gz: 32a6d6da4edbfb741946453ebc4d2cef3de16d0bea30a4749ab394bf0eae647c53eae64d8acd4f649fdb9ffc789e4fc0c2ab85526b382892fc7bc9c75d0d8015
@@ -47,7 +47,7 @@ module SvelteOnRails
47
47
  end
48
48
 
49
49
  if entries.empty?
50
- puts "No keys found under «#{pattern}»."
50
+ puts "No keys found under «#{pattern}»." unless silent
51
51
  return []
52
52
  end
53
53
  entries
@@ -6,12 +6,15 @@ module SvelteOnRails
6
6
 
7
7
  include Singleton
8
8
 
9
+ STARTUP_GENERATION_TTL = 30
10
+
9
11
  attr_reader :logfile_path,
10
12
  :logfile_max_lines,
11
13
  :socket_path,
12
14
  :ssr_server_bin_path,
13
15
  :node_bin,
14
- :initialized_by
16
+ :initialized_by,
17
+ :startup_id
15
18
 
16
19
  def self.instance(caller: nil)
17
20
 
@@ -23,38 +26,38 @@ module SvelteOnRails
23
26
 
24
27
  @initialized_by = caller
25
28
 
26
- if startup_leader?
27
- File.open(SvelteOnRails::Lib::Utils.ssr_server_logfile, 'w') do |f|
28
- f.sync = true
29
- f.puts("[#{Time.now.utc.iso8601(3)} ppid:#{Process.ppid} pid:#{Process.pid}] >>> Logfile deleted on initializing SsrClient, called by #{caller} <<<")
30
- end
31
- end
32
-
33
29
  @socket_namespace = [
34
30
  "svelte",
35
31
  Rails.application.class.module_parent_name[0..15],
36
32
  Rails.env
37
33
  ].join("-")
34
+
35
+ @startup_leader = startup_leader?
38
36
  @socket_path = socket_path_fresh
39
37
 
38
+ if @startup_leader
39
+ File.open(SvelteOnRails::Lib::Utils.ssr_server_logfile, 'w') do |f|
40
+ f.sync = true
41
+ f.puts("[#{Time.now.utc.iso8601(3)} startup_id:#{@startup_id} ppid:#{Process.ppid} pid:#{Process.pid}] >>> Logfile deleted on initializing SsrClient, called by #{caller} <<<")
42
+ end
43
+ end
44
+
40
45
  @logfile_path = Rails.root.join("log/svelte-ssr-server-#{Rails.env}.log")
41
46
  @logfile_max_lines = build_logfile_max_lines
42
47
  @ssr_server = SvelteOnRails::Configuration.instance.configs[:ssr_server]
43
48
  @ssr_server_bin_path = SvelteOnRails::Configuration.instance.ssr_server_bin_path
44
49
  @started = Time.now
45
50
 
46
- File.delete(restart_marker_file) if File.exist?(restart_marker_file)
47
-
48
- SvelteOnRails::SsrClientControlChannel.install_control_listener if startup_leader?
51
+ SvelteOnRails::SsrClientControlChannel.install_control_listener if @startup_leader
49
52
 
50
53
  if @ssr_server
51
54
 
52
- start_node_server! if startup_leader?
55
+ start_node_server! if @startup_leader
53
56
 
54
57
  at_exit do
55
- shutdown(caller: 'at_exit')
56
- File.delete(restart_marker_file) if File.exist?(restart_marker_file)
57
- FileUtils.remove(flock_file) if File.exist?(flock_file)
58
+ shutdown(caller: 'at_exit') if @startup_leader
59
+ @startup_flock&.flock(File::LOCK_UN)
60
+ @startup_flock&.close
58
61
  end
59
62
  else
60
63
  SvelteOnRails::Lib::Utils.ssr_server_log("SSR Server NOT used => @ssr_server #{@ssr_server}")
@@ -131,7 +134,7 @@ module SvelteOnRails
131
134
  :render_failed,
132
135
  "Render #{component[:file_basename]}.svelte",
133
136
  [
134
- raw_response['logs'].to_a.join("\n"),
137
+ format_node_error_logs(raw_response['logs']),
135
138
  "View:\n#{view_path_proc.call}\nComponent:\n#{Rails.root.join(component[:path]).to_s}#{imps}",
136
139
  ]
137
140
  )
@@ -161,6 +164,7 @@ module SvelteOnRails
161
164
  unless File.exist?(socket_path)
162
165
  return false
163
166
  end
167
+
164
168
  response = ''
165
169
  begin
166
170
  sock = UNIXSocket.new(socket_path)
@@ -171,6 +175,7 @@ module SvelteOnRails
171
175
  rescue => e
172
176
  puts "[SOR] Ping Failed: #{e.message}"
173
177
  end
178
+
174
179
  if response.match?(/^HTTP\/\d\.\d 200/)
175
180
  r = parse_body_json(response)
176
181
  unless r['version'].split('.').first.to_i >= 14
@@ -181,11 +186,17 @@ module SvelteOnRails
181
186
  end
182
187
 
183
188
  def start_node_server!(
184
- started_by = "rails-boot-#{Rails.env}-#{Process.ppid}",
189
+ started_by = "rails-boot-#{Rails.env}-#{@startup_id}",
185
190
  restart_after_failure: false
186
191
  )
187
192
 
188
- return if ping?
193
+ if ping?
194
+ SvelteOnRails::Lib::Utils.ssr_server_log(
195
+ "SOR start_node_server skipped because SSR server is already running for startup_id #{@startup_id}",
196
+ ssr_logfile_only: !restart_after_failure
197
+ )
198
+ return
199
+ end
189
200
 
190
201
  SvelteOnRails::Lib::Utils.ssr_server_log("SOR start_node_server! called", ssr_logfile_only: !restart_after_failure)
191
202
 
@@ -203,6 +214,7 @@ module SvelteOnRails
203
214
  status: status
204
215
  }
205
216
  end
217
+
206
218
  SvelteOnRails::Lib::Utils.ssr_server_log("Node Version: #{Configuration.instance.node_version_test}, package version: #{Configuration.instance.npm_package_version_test}")
207
219
  SvelteOnRails::Lib::Utils.ssr_server_log("Start running Svelte-SSR-Server... (#{started_by})")
208
220
 
@@ -227,30 +239,50 @@ module SvelteOnRails
227
239
  SvelteOnRails::Lib::Utils.ssr_server_log("Server responded successfully")
228
240
 
229
241
  cleanup_leftover_processes
230
-
231
- cleanup_flock_file_later
232
242
  end
233
243
 
234
244
  def restart_my_server(tag = nil)
245
+ SvelteOnRails::Lib::Utils.ssr_server_log("[ERROR] try to restart the node instances...")
246
+ FileUtils.mkdir_p(File.dirname(restart_flock_file))
247
+ restart_flock_existed = File.exist?(restart_flock_file)
248
+
249
+ File.open(restart_flock_file, File::RDWR | File::CREAT, 0o644) do |flock|
250
+ unless flock.flock(File::LOCK_EX | File::LOCK_NB)
251
+ SvelteOnRails::Lib::Utils.ssr_server_log(
252
+ "[ERROR] SSR restart already in progress by another worker"
253
+ )
254
+ return
255
+ end
235
256
 
236
- marker = restart_marker_file
237
- if File.exist?(marker) && File.mtime(marker) > 10.seconds.ago
238
- SvelteOnRails::Lib::Utils.ssr_server_log("[ERROR] Prevented Server Restart because server was restarted too recently: #{marker}")
239
- return
240
- end
257
+ return if ping?
241
258
 
242
- FileUtils.mkdir_p(marker.dirname)
243
- File.open(marker, "a") { |f| f.puts(Time.now.utc.iso8601) }
244
- count = File.read(marker).lines.count
259
+ if restart_flock_existed
260
+ last_restart_at = File.mtime(restart_flock_file)
261
+ if last_restart_at > 10.seconds.ago
262
+ seconds_since_restart = Time.now - last_restart_at
263
+ SvelteOnRails::Lib::Utils.ssr_server_log(
264
+ "[ERROR] Prevented Server Restart because server was restarted too recently: #{seconds_since_restart.round(2)}s ago"
265
+ )
266
+ return
267
+ end
268
+ end
245
269
 
246
- msg = "Restarting SSR server (#{tag})"
247
- Rails.logger.error(msg)
248
- SvelteOnRails::Lib::Utils.ssr_server_log("[ERROR] #{msg}")
270
+ flock.seek(0, IO::SEEK_END)
271
+ flock.puts(Time.now.utc.iso8601)
272
+ flock.flush
273
+ count = File.readlines(restart_flock_file).count
249
274
 
250
- shutdown(caller: 'restart')
251
- begin
252
- start_node_server!("#{tag.gsub(' ', '-') + '-' if tag}#{count}", restart_after_failure: true)
253
- rescue
275
+ # RESTART
276
+
277
+ msg = "Restarting SSR server (#{tag})"
278
+ Rails.logger.error(msg)
279
+ SvelteOnRails::Lib::Utils.ssr_server_log("[ERROR] #{msg}")
280
+
281
+ shutdown(caller: 'restart')
282
+ begin
283
+ start_node_server!("#{tag.gsub(' ', '-') + '-' if tag}#{count}", restart_after_failure: true)
284
+ rescue
285
+ end
254
286
  end
255
287
  end
256
288
 
@@ -259,7 +291,7 @@ module SvelteOnRails
259
291
  "ps aux | grep svelte"
260
292
  )
261
293
  stdout.split("\n").each do |line|
262
- if line.include?("#{@socket_namespace}-#{Process.ppid}.sock")
294
+ if line.include?("#{@socket_namespace}-#{@startup_id}.sock")
263
295
  return line.match(/[0-9]+/).to_s.to_i
264
296
  end
265
297
  end
@@ -282,8 +314,7 @@ module SvelteOnRails
282
314
  end
283
315
 
284
316
  def shutdown(caller: '')
285
- SsrClient.instance_variable_set(:@instance, nil)
286
- SvelteOnRails::Lib::Utils.ssr_server_log("Shutting down SSR client, ppid: #{Process.ppid} (#{caller})")
317
+ SvelteOnRails::Lib::Utils.ssr_server_log("Shutting down SSR client, startup_id: #{@startup_id}, ppid: #{Process.ppid} (#{caller})")
287
318
  terminate_node_processes(own_processes, label: "own")
288
319
  {
289
320
  success: true
@@ -296,23 +327,24 @@ module SvelteOnRails
296
327
 
297
328
  # NODE PROCESS MANAGEMENT
298
329
 
299
- SsrProcess = Struct.new(:pid, :ppid, :socket_path, keyword_init: true)
330
+ SsrProcess = Struct.new(:pid, :startup_id, :socket_path, keyword_init: true)
300
331
 
301
332
  def own_processes
302
- scan_processes.select { |p| p.ppid == Process.ppid }
333
+ scan_processes.select { |p| p.startup_id == @startup_id }
303
334
  end
304
335
 
305
336
  def leftover_processes
306
- scan_processes.reject { |p| p.ppid == Process.ppid }
337
+ scan_processes.reject { |p| p.startup_id == @startup_id }
307
338
  end
308
339
 
309
340
  def leftover_sockets
310
- scan_sockets.reject { |s| s[:ppid] == Process.ppid }
341
+ scan_sockets.reject { |s| s[:startup_id] == @startup_id }
311
342
  end
312
343
 
313
344
  def cleanup_leftover_processes
314
345
  terminate_node_processes(leftover_processes, label: "leftover")
315
346
  delete_sockets(leftover_sockets.map { |s| s[:path] }, label: "leftover")
347
+ delete_old_startup_flock_files
316
348
  end
317
349
 
318
350
  # END node process management
@@ -322,49 +354,103 @@ module SvelteOnRails
322
354
  def startup_leader?
323
355
  return @startup_leader unless @startup_leader.nil?
324
356
 
325
- FileUtils.mkdir_p(File.dirname(flock_file))
357
+ FileUtils.mkdir_p(startup_lock_dir)
358
+
359
+ if (recent_file = latest_recent_startup_flock_file)
360
+ @startup_id = startup_id_from_flock_file(recent_file)
361
+ SvelteOnRails::Lib::Utils.ssr_server_log(
362
+ "Startup generation reused: startup_id=#{@startup_id}, pid=#{Process.pid}, ppid=#{Process.ppid}",
363
+ ssr_logfile_only: true
364
+ )
365
+ return @startup_leader = false
366
+ end
367
+
368
+ @startup_id = build_startup_id
369
+ path = startup_flock_file(@startup_id)
326
370
 
327
- flock = File.open(flock_file, File::RDWR | File::CREAT, 0o644)
371
+ begin
372
+ @startup_flock = File.open(path, File::WRONLY | File::CREAT | File::EXCL, 0o644)
373
+ @startup_flock.flock(File::LOCK_EX | File::LOCK_NB)
374
+ write_startup_flock_info(@startup_flock)
328
375
 
329
- if flock.flock(File::LOCK_EX | File::LOCK_NB)
330
376
  SvelteOnRails::Lib::Utils.ssr_server_log(
331
- "Startup leader process elected: pid=#{Process.pid}, ppid=#{Process.ppid}",
377
+ "Startup leader process elected: startup_id=#{@startup_id}, pid=#{Process.pid}, ppid=#{Process.ppid}",
332
378
  ssr_logfile_only: true
333
379
  )
380
+
334
381
  @startup_leader = true
335
- else
336
- flock.close
382
+ rescue Errno::EEXIST
383
+ @startup_flock&.close
384
+ @startup_flock = nil
385
+
386
+ recent_file = latest_recent_startup_flock_file || latest_startup_flock_file
387
+ @startup_id = startup_id_from_flock_file(recent_file)
337
388
 
338
389
  SvelteOnRails::Lib::Utils.ssr_server_log(
339
- "Startup leader already exists; skipping Node startup in pid=#{Process.pid}, ppid=#{Process.ppid}",
390
+ "Startup generation already created by another worker: startup_id=#{@startup_id}, pid=#{Process.pid}, ppid=#{Process.ppid}",
340
391
  ssr_logfile_only: true
341
392
  )
393
+
342
394
  @startup_leader = false
343
395
  end
344
396
 
345
397
  @startup_leader
346
398
  end
347
399
 
400
+ def startup_lock_dir
401
+ Rails.root.join('tmp', 'sockets')
402
+ end
403
+
404
+ def startup_flock_glob
405
+ startup_lock_dir.join("sor-startup-leader-*.flock")
406
+ end
407
+
408
+ def startup_flock_file(startup_id)
409
+ startup_lock_dir.join("sor-startup-leader-#{startup_id}.flock")
410
+ end
411
+
348
412
  def flock_file
349
- Rails.root.join('tmp', 'sockets', "sor-startup-leader-#{Process.ppid}.flock")
413
+ startup_flock_file(@startup_id)
350
414
  end
351
415
 
352
- def cleanup_flock_file_later
353
- path = flock_file
416
+ def restart_flock_file
417
+ Rails.root.join('tmp', 'sockets', "sor-restart-#{@startup_id}.flock")
418
+ end
354
419
 
355
- Thread.new do
356
- sleep 3
357
- FileUtils.rm_f(path)
358
- rescue => e
359
- SvelteOnRails::Lib::Utils.ssr_server_log(
360
- "Could not remove flock file #{path}: #{e.class}: #{e.message}",
361
- ssr_logfile_only: true
362
- )
363
- end
420
+ def build_startup_id
421
+ bucket = Time.now.to_i / STARTUP_GENERATION_TTL * STARTUP_GENERATION_TTL
422
+ "#{bucket}-#{Process.pid}"
423
+ end
424
+
425
+ def startup_id_from_flock_file(path)
426
+ basename = File.basename(path.to_s)
427
+ basename.delete_prefix("sor-startup-leader-").delete_suffix(".flock")
428
+ end
429
+
430
+ def latest_startup_flock_file
431
+ Dir.glob(startup_flock_glob.to_s).max_by { |path| File.mtime(path) }
432
+ end
433
+
434
+ def latest_recent_startup_flock_file
435
+ latest = latest_startup_flock_file
436
+ return unless latest
437
+
438
+ age = Time.now - File.mtime(latest)
439
+ latest if age <= STARTUP_GENERATION_TTL
364
440
  end
365
441
 
366
- def restart_marker_file
367
- Rails.root.join("tmp", "ssr_server_last_restart")
442
+ def write_startup_flock_info(flock)
443
+ flock.rewind
444
+ flock.truncate(0)
445
+ flock.puts({
446
+ startup_id: @startup_id,
447
+ pid: Process.pid,
448
+ ppid: Process.ppid,
449
+ rails_root: Rails.root.to_s,
450
+ socket_path: socket_path_fresh.to_s,
451
+ created_at: Time.now.utc.iso8601(3)
452
+ }.to_json)
453
+ flock.flush
368
454
  end
369
455
 
370
456
  def default_ssr_url
@@ -405,6 +491,7 @@ module SvelteOnRails
405
491
 
406
492
  def shorten_logfile
407
493
  return unless File.exist?(logfile_path)
494
+
408
495
  Thread.new do
409
496
  lines = File.readlines(logfile_path, chomp: true)
410
497
  unless lines.size <= logfile_max_lines
@@ -434,8 +521,7 @@ module SvelteOnRails
434
521
  end
435
522
 
436
523
  def socket_path_fresh
437
- ppid = Process.ppid
438
- app_sock = Rails.root.join("tmp/sockets/#{@socket_namespace}-#{ppid}.sock")
524
+ app_sock = Rails.root.join("tmp/sockets/#{@socket_namespace}-#{@startup_id}.sock")
439
525
  if app_sock.to_s.length <= 103
440
526
  FileUtils.mkdir_p(File.dirname(app_sock))
441
527
  return app_sock
@@ -443,11 +529,23 @@ module SvelteOnRails
443
529
 
444
530
  # Fallback: socket paths > 103 chars are unreliable on macOS/BSD
445
531
  FileUtils.rm_f(app_sock) if File.exist?(app_sock)
446
- fallback = Pathname.new("/tmp/#{@socket_namespace}-#{ppid}.sock")
532
+ fallback = Pathname.new("/tmp/#{@socket_namespace}-#{@startup_id}.sock")
447
533
  SvelteOnRails::Lib::Utils.ssr_server_log("sockets longer than 103 chars are risky, fallback to: #{fallback}")
448
534
  fallback
449
535
  end
450
536
 
537
+ def format_node_error_logs(logs)
538
+ errors = logs.select { |l| l['level'].downcase.include?('error') }
539
+ l = errors.present? ? errors : logs
540
+ l.map do |lg|
541
+ if lg['level'].present? && lg['msg'].present?
542
+ "#{lg['level'].upcase}: #{lg['msg']}"
543
+ else
544
+ lg.to_s
545
+ end
546
+ end.compact.join("\n")
547
+ end
548
+
451
549
  # NODE PROCESS MANAGEMENT
452
550
 
453
551
  def terminate_node_processes(processes, label:)
@@ -455,7 +553,7 @@ module SvelteOnRails
455
553
 
456
554
  processes.group_by(&:socket_path).values.flat_map { |g| g.sort_by(&:pid) }.each do |p|
457
555
  Process.kill("SIGINT", p.pid) rescue Errno::ESRCH || Errno::EPERM
458
- SvelteOnRails::Lib::Utils.ssr_server_log(" Killed #{label} unix-pid: #{p.pid}, rails-ppid: #{p.ppid}, socket-path: #{p.socket_path}", ssr_logfile_only: true)
556
+ SvelteOnRails::Lib::Utils.ssr_server_log(" Killed #{label} unix-pid: #{p.pid}, startup_id: #{p.startup_id}, socket-path: #{p.socket_path}", ssr_logfile_only: true)
459
557
  end
460
558
 
461
559
  SvelteOnRails::Lib::Utils.ssr_server_log("Killed #{processes.length} #{label} process#{'es' if processes.length != 1}")
@@ -473,23 +571,36 @@ module SvelteOnRails
473
571
  SvelteOnRails::Lib::Utils.ssr_server_log("Deleted #{socket_paths.size} #{label} socket#{'s' if socket_paths.size != 1}")
474
572
  end
475
573
 
574
+ def delete_old_startup_flock_files
575
+ Dir.glob(startup_flock_glob.to_s).each do |path|
576
+ next if startup_id_from_flock_file(path) == @startup_id
577
+
578
+ FileUtils.rm_f(path) if File.exist?(path)
579
+ rescue => e
580
+ SvelteOnRails::Lib::Utils.ssr_server_log(
581
+ "Could not remove old startup flock file #{path}: #{e.class}: #{e.message}",
582
+ ssr_logfile_only: true
583
+ )
584
+ end
585
+ end
586
+
476
587
  def scan_processes
477
588
  stdout, = Open3.capture3("ps aux | grep svelte | grep -v grep")
478
- regex = %r{(/\S*#{Regexp.escape(@socket_namespace)}-(\d+)\.sock)\b}
589
+ regex = %r{(/\S*#{Regexp.escape(@socket_namespace)}-([0-9]+-[0-9]+)\.sock)\b}
479
590
 
480
591
  stdout.each_line.filter_map do |line|
481
592
  m = line.match(regex) or next
482
593
  pid = Integer(line.split(/\s+/, 12)[1], exception: false) or next
483
- SsrProcess.new(pid: pid, ppid: m[2].to_i, socket_path: m[1])
594
+ SsrProcess.new(pid: pid, startup_id: m[2], socket_path: m[1])
484
595
  end
485
596
  end
486
597
 
487
598
  def scan_sockets
488
599
  dirs = [Rails.root.join("tmp/sockets").to_s, "/tmp"]
489
- regex = /#{Regexp.escape(@socket_namespace)}-(\d+)\.sock\z/
600
+ regex = /#{Regexp.escape(@socket_namespace)}-([0-9]+-[0-9]+)\.sock\z/
490
601
 
491
602
  dirs.flat_map { |d| Dir.glob(File.join(d, "#{@socket_namespace}-*.sock")) }
492
- .filter_map { |path| (m = path.match(regex)) && { path: path, ppid: m[1].to_i } }
603
+ .filter_map { |path| (m = path.match(regex)) && { path: path, startup_id: m[1] } }
493
604
  end
494
605
 
495
606
  # END node process management
@@ -514,6 +625,7 @@ module SvelteOnRails
514
625
  # enable communication by rake task for admin purposes
515
626
  def self.install_control_listener
516
627
  return if @installed
628
+
517
629
  @installed = true
518
630
 
519
631
  path = socket_path.to_s
@@ -536,6 +648,7 @@ module SvelteOnRails
536
648
  env: Rails.env,
537
649
  uptime: client_instance.uptime,
538
650
  request: request,
651
+ startup_id: client_instance.startup_id,
539
652
  socket_path: client_instance.socket_path,
540
653
  initialized_by: client_instance.initialized_by,
541
654
  ping: client_instance.ping?,
@@ -13,8 +13,6 @@ namespace :svelte_on_rails do
13
13
  configs = SvelteOnRails::Configuration.instance
14
14
  socket_path = client_status[:socket_path]
15
15
 
16
- puts client_status.to_s
17
-
18
16
  puts
19
17
  puts '=' * @line_width
20
18
  puts
@@ -72,7 +70,7 @@ namespace :svelte_on_rails do
72
70
  ps_stdout, ps_stderr, ps_status = Open3.capture3(ps_cmd)
73
71
  total_kb = ps_stdout.each_line.sum { |line| line.to_i }
74
72
 
75
- puts " #{human_bytes(total_kb*1024)} for #{pids.size} node #{'worker'.pluralize(pids.size)}"
73
+ puts " #{human_bytes(total_kb*1024)} for #{pids.size} node #{'process'.pluralize(pids.size)}"
76
74
 
77
75
  redis_entries = SvelteOnRails::Cache.redis_entries(silent: true)
78
76
  total_bytes = redis_entries.sum { |e| e[:bytes] }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: svelte-on-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 23.1.0
4
+ version: 23.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Sedlmair