svelte-on-rails 22.5.0 → 22.5.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 +4 -4
- data/lib/svelte_on_rails/ssr_client.rb +59 -40
- data/lib/tasks/ssr_client_tasks.rake +16 -6
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e508b30c7a40e2274cacc0a291fe40b54ad33b13bcb2e1fc7851db51102392d8
|
|
4
|
+
data.tar.gz: 6baa52304e5f6269e38557015f9ae3d1d24447904bea9749afeff23099d97529
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e059fb08261304ce5941788ebb9261f0919044e730a38f6c381e756c5707dc838b6376dd75f0edd7216b8bf420a710fc67927b05c19fbfff9a3e66cc226bd449
|
|
7
|
+
data.tar.gz: 76c5ca5ebb681524b04be2d87e88d477db6af12537a382a230cb423042ec36da722e484c7536646f87f065a2bff1ca13f1f976cec8f030b3e6037fd20c2d42ea
|
|
@@ -11,13 +11,16 @@ module SvelteOnRails
|
|
|
11
11
|
:socket_path,
|
|
12
12
|
:ssr_server_bin_path,
|
|
13
13
|
:node_bin,
|
|
14
|
-
:initialized_by
|
|
14
|
+
:initialized_by,
|
|
15
|
+
:render_success_count,
|
|
16
|
+
:render_failure_count,
|
|
17
|
+
:error_log
|
|
15
18
|
|
|
16
19
|
# methods
|
|
17
20
|
|
|
18
21
|
def self.instance(caller: nil)
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
@instance ||= new(caller: caller)
|
|
21
24
|
@instance
|
|
22
25
|
end
|
|
23
26
|
|
|
@@ -30,11 +33,10 @@ module SvelteOnRails
|
|
|
30
33
|
f.puts("[#{Time.now.utc.iso8601(3)} ppid:#{Process.ppid} pid:#{Process.pid}] >>> Logfile deleted on initializing SsrClient, called by #{caller} <<<")
|
|
31
34
|
end
|
|
32
35
|
|
|
33
|
-
|
|
34
36
|
@socket_namespace = [
|
|
35
37
|
"svelte",
|
|
36
|
-
Rails.application.class.module_parent_name[0..
|
|
37
|
-
short_env
|
|
38
|
+
Rails.application.class.module_parent_name[0..15],
|
|
39
|
+
SsrClientControlChannel.short_env
|
|
38
40
|
].join("-")
|
|
39
41
|
@socket_path = socket_path_fresh
|
|
40
42
|
|
|
@@ -44,6 +46,10 @@ module SvelteOnRails
|
|
|
44
46
|
@ssr_server_bin_path = SvelteOnRails::Configuration.instance.ssr_server_bin_path
|
|
45
47
|
@started = Time.now
|
|
46
48
|
|
|
49
|
+
@render_success_count = 0
|
|
50
|
+
@render_failure_count = 0
|
|
51
|
+
@error_log = []
|
|
52
|
+
|
|
47
53
|
File.delete(restart_marker_file) if File.exist?(restart_marker_file)
|
|
48
54
|
|
|
49
55
|
SvelteOnRails::SsrClientControlChannel.install_control_listener
|
|
@@ -85,6 +91,9 @@ module SvelteOnRails
|
|
|
85
91
|
socket.close
|
|
86
92
|
rescue => e
|
|
87
93
|
|
|
94
|
+
write_error_log(e)
|
|
95
|
+
@render_failure_count += 1
|
|
96
|
+
|
|
88
97
|
restart_my_server('Restart-after-failure')
|
|
89
98
|
|
|
90
99
|
SvelteOnRails::Lib::Utils.error_log(
|
|
@@ -104,6 +113,7 @@ module SvelteOnRails
|
|
|
104
113
|
|
|
105
114
|
raw_response = parse_body_json(response)
|
|
106
115
|
if raw_response['status'] == 'SUCCESS'
|
|
116
|
+
@render_success_count += 1
|
|
107
117
|
htm = raw_response['html'].to_s
|
|
108
118
|
.gsub('<!--[-->', '')
|
|
109
119
|
.gsub('<!--]-->', '')
|
|
@@ -124,6 +134,10 @@ module SvelteOnRails
|
|
|
124
134
|
else
|
|
125
135
|
''
|
|
126
136
|
end
|
|
137
|
+
|
|
138
|
+
write_error_log("Render #{component[:file_basename]}.svelte")
|
|
139
|
+
@render_failure_count += 1
|
|
140
|
+
|
|
127
141
|
utils = SvelteOnRails::Lib::Utils
|
|
128
142
|
utils.error_log(
|
|
129
143
|
:render_failed,
|
|
@@ -140,6 +154,12 @@ module SvelteOnRails
|
|
|
140
154
|
|
|
141
155
|
end
|
|
142
156
|
|
|
157
|
+
def write_error_log(msg)
|
|
158
|
+
timestamp = Time.now.strftime('%Y-%m-%d %H:%M:%S.%3N')
|
|
159
|
+
@error_log << "[#{timestamp}] #{msg}"
|
|
160
|
+
@error_log.shift while @error_log.size > 50
|
|
161
|
+
end
|
|
162
|
+
|
|
143
163
|
def parse_body_json(response_string)
|
|
144
164
|
return {} unless response_string.to_s.present?
|
|
145
165
|
|
|
@@ -386,17 +406,15 @@ module SvelteOnRails
|
|
|
386
406
|
def socket_path_fresh
|
|
387
407
|
ppid = Process.ppid
|
|
388
408
|
app_sock = Rails.root.join("tmp/sockets/#{@socket_namespace}-#{ppid}.sock")
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
409
|
+
if app_sock.to_s.length <= 103
|
|
410
|
+
FileUtils.mkdir_p(File.dirname(app_sock))
|
|
411
|
+
return app_sock
|
|
412
|
+
end
|
|
392
413
|
|
|
393
|
-
# Fallback: socket paths >
|
|
414
|
+
# Fallback: socket paths > 103 chars are unreliable on macOS/BSD
|
|
394
415
|
FileUtils.rm_f(app_sock) if File.exist?(app_sock)
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
FileUtils.chmod(0777, dir)
|
|
398
|
-
fallback = Pathname.new("#{dir}/#{@socket_namespace}-#{ppid}.sock")
|
|
399
|
-
SvelteOnRails::Lib::Utils.ssr_server_log("sockets longer than 104 chars are risky, fallback to: #{fallback}")
|
|
416
|
+
fallback = Pathname.new("/tmp/#{@socket_namespace}-#{ppid}.sock")
|
|
417
|
+
SvelteOnRails::Lib::Utils.ssr_server_log("sockets longer than 103 chars are risky, fallback to: #{fallback}")
|
|
400
418
|
fallback
|
|
401
419
|
end
|
|
402
420
|
|
|
@@ -437,7 +455,7 @@ module SvelteOnRails
|
|
|
437
455
|
end
|
|
438
456
|
|
|
439
457
|
def scan_sockets
|
|
440
|
-
dirs = [Rails.root.join("tmp/sockets").to_s, "/tmp
|
|
458
|
+
dirs = [Rails.root.join("tmp/sockets").to_s, "/tmp"]
|
|
441
459
|
regex = /#{Regexp.escape(@socket_namespace)}-(\d+)\.sock\z/
|
|
442
460
|
|
|
443
461
|
dirs.flat_map { |d| Dir.glob(File.join(d, "#{@socket_namespace}-*.sock")) }
|
|
@@ -446,38 +464,21 @@ module SvelteOnRails
|
|
|
446
464
|
|
|
447
465
|
# END node process management
|
|
448
466
|
|
|
449
|
-
def short_env
|
|
450
|
-
|
|
451
|
-
name = Rails.env.to_s
|
|
452
|
-
|
|
453
|
-
short = {
|
|
454
|
-
"development" => "dev",
|
|
455
|
-
"production" => "prod",
|
|
456
|
-
"staging" => "stage",
|
|
457
|
-
}[name]
|
|
458
|
-
|
|
459
|
-
return name unless short
|
|
460
|
-
return name if Rails.root.join("config", "environments", "#{short}.rb").exist?
|
|
461
|
-
short
|
|
462
|
-
end
|
|
463
|
-
|
|
464
467
|
end
|
|
465
468
|
|
|
466
469
|
class SsrClientControlChannel
|
|
467
470
|
|
|
468
|
-
SOCKET_FILENAME = "svelte-ctl.sock"
|
|
469
|
-
|
|
470
471
|
# Full path of the control socket.
|
|
471
472
|
# Sits next to the SSR socket in tmp/sockets, or in the /tmp/svelte
|
|
472
|
-
# fallback directory when Rails.root pushes total length over
|
|
473
|
+
# fallback directory when Rails.root pushes total length over 103 chars.
|
|
473
474
|
def self.socket_path
|
|
474
|
-
primary = Rails.root.join("tmp", "sockets",
|
|
475
|
-
|
|
475
|
+
primary = Rails.root.join("tmp", "sockets", "svelte-ctl-#{short_env}.sock")
|
|
476
|
+
if primary.to_s.length <= 103
|
|
477
|
+
FileUtils.mkdir_p(File.dirname(primary))
|
|
478
|
+
return primary
|
|
479
|
+
end
|
|
476
480
|
|
|
477
|
-
|
|
478
|
-
FileUtils.mkdir_p(fallback_dir)
|
|
479
|
-
FileUtils.chmod(0777, fallback_dir)
|
|
480
|
-
fallback_dir.join(SOCKET_FILENAME)
|
|
481
|
+
Pathname.new("/tmp/svelte-#{short_env}-ctl-#{Digest::XXH64.hexdigest(Rails.root.to_s)}.sock")
|
|
481
482
|
end
|
|
482
483
|
|
|
483
484
|
# enable communication by rake task for admin purposes
|
|
@@ -506,7 +507,10 @@ module SvelteOnRails
|
|
|
506
507
|
socket_path: client_instance.socket_path,
|
|
507
508
|
initialized_by: client_instance.initialized_by,
|
|
508
509
|
ping: client_instance.ping?,
|
|
509
|
-
start_node_server_command: client_instance.start_node_server_command
|
|
510
|
+
start_node_server_command: client_instance.start_node_server_command,
|
|
511
|
+
render_success_count: client_instance.render_success_count,
|
|
512
|
+
render_failure_count: client_instance.render_failure_count,
|
|
513
|
+
error_log: client_instance.error_log
|
|
510
514
|
}
|
|
511
515
|
when :stop
|
|
512
516
|
begin
|
|
@@ -544,6 +548,21 @@ module SvelteOnRails
|
|
|
544
548
|
)
|
|
545
549
|
|
|
546
550
|
end
|
|
551
|
+
|
|
552
|
+
def self.short_env
|
|
553
|
+
|
|
554
|
+
name = Rails.env.to_s
|
|
555
|
+
|
|
556
|
+
short = {
|
|
557
|
+
"development" => "dev",
|
|
558
|
+
"production" => "prod",
|
|
559
|
+
"staging" => "stage",
|
|
560
|
+
}[name]
|
|
561
|
+
|
|
562
|
+
return name unless short
|
|
563
|
+
return name if Rails.root.join("config", "environments", "#{short}.rb").exist?
|
|
564
|
+
short
|
|
565
|
+
end
|
|
547
566
|
end
|
|
548
567
|
|
|
549
568
|
class SsrError < StandardError; end
|
|
@@ -19,14 +19,15 @@ namespace :svelte_on_rails do
|
|
|
19
19
|
puts "INFO FROM THE SSR CLIENT (Rails-side):"
|
|
20
20
|
puts
|
|
21
21
|
puts " Rails env : #{client_status[:env]}"
|
|
22
|
-
puts " Uptime : #{client_status[:uptime].round(0)}sec"
|
|
23
22
|
puts " Initialized by : #{client_status[:initialized_by]}"
|
|
24
|
-
puts "
|
|
25
|
-
puts " Ping to Node : #{client_status[:ping] ? 'SUCCESS' : 'FAILED'}"
|
|
26
|
-
puts ' Node bin : ' + configs.node_bin_path.to_s
|
|
23
|
+
puts " Uptime : #{client_status[:uptime].round(0)} sec"
|
|
27
24
|
puts ' Node version : ' + configs.node_version_test
|
|
28
|
-
puts '
|
|
25
|
+
puts ' Node bin : ' + configs.node_bin_path.to_s
|
|
29
26
|
puts ' NPM package version : ' + configs.npm_package_version_test.to_s
|
|
27
|
+
puts ' SSR Server bin : ' + configs.ssr_server_bin_path.to_s
|
|
28
|
+
puts " Socket (SsrServer) : #{socket_path} (#{File.socket?(socket_path) ? 'Present/OK' : 'NOT FOUND!'})"
|
|
29
|
+
puts " Ping to SsrServer : #{client_status[:ping] ? 'SUCCESS' : 'FAILED'}"
|
|
30
|
+
puts " SSR renders : #{client_status[:render_success_count]} succeeded, #{client_status[:render_failure_count]} failed"
|
|
30
31
|
puts
|
|
31
32
|
|
|
32
33
|
# NODE SERVER STATUS
|
|
@@ -54,6 +55,13 @@ namespace :svelte_on_rails do
|
|
|
54
55
|
puts
|
|
55
56
|
puts 'ADDITIONAL INFO:'
|
|
56
57
|
puts
|
|
58
|
+
if client_status[:error_log] == []
|
|
59
|
+
puts 'No error logs on the client side (Ruby).'
|
|
60
|
+
else
|
|
61
|
+
puts "#{client_status[:error_log].length} Errors (Limited to 50):"
|
|
62
|
+
puts " #{client_status[:error_log].reverse.join("\n ")}"
|
|
63
|
+
end
|
|
64
|
+
puts
|
|
57
65
|
puts 'How was the node bin path determined:'
|
|
58
66
|
configs.instance_variable_get(:@node_bin_path_log).each_with_index do |line, index|
|
|
59
67
|
puts " #{index + 1} #{line}"
|
|
@@ -89,7 +97,9 @@ namespace :svelte_on_rails do
|
|
|
89
97
|
path = SvelteOnRails::SsrClientControlChannel.socket_path.to_path
|
|
90
98
|
unless File.socket?(path)
|
|
91
99
|
puts "*" * @line_width
|
|
92
|
-
puts "ERROR: Control socket not found at #{path}
|
|
100
|
+
puts "ERROR: Control socket not found at #{path}"
|
|
101
|
+
puts " • Is Rails running?"
|
|
102
|
+
puts " • Are you in the correct Rails environment (You have: #{Rails.env})?"
|
|
93
103
|
puts "*" * @line_width
|
|
94
104
|
return
|
|
95
105
|
end
|