svelte-on-rails 20.0.16 → 20.0.17
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/railtie.rb +8 -21
- data/lib/svelte_on_rails/ssr_server.rb +38 -27
- data/lib/tasks/svelte_on_rails_tasks.rake +39 -2
- 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: 9144e74eeecc65734e45f39390210c62b8192b4c8fd057aef5903a84637d97e3
|
|
4
|
+
data.tar.gz: 4bc9d6d33e6cb7983c1c1b4e2f2c8a0c40e1065ed333ad79aecbea2e385d84e1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fe98253869d4730560c194113043e04f4e8ae29abb62a1fcc6140498fb164bb0b3ee9aaddfaf539145eee955a2e99fdf808ffa8c83de7bb3a527ae333cf70008
|
|
7
|
+
data.tar.gz: 86ec27e42e9730ae51b3d41b4955a05113eac218074c3e2b3d55333d0aacf603f5772e1a1c373a750da6d77b7b930a58c8701443878ffe4b1dee1e3e5deaa2b2
|
|
@@ -17,31 +17,18 @@ module SvelteOnRails
|
|
|
17
17
|
initializer "svelte-on-rails.initialize_ssr_client" do |app|
|
|
18
18
|
app.config.after_initialize do
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
if defined?(Rake) && Rake.respond_to?(:application) && Rake.application.top_level_tasks.any?
|
|
21
|
+
puts "[Skipping svelte-on-rails because of top level task: #{Rake.application.top_level_tasks.join(', ')}]"
|
|
22
|
+
$stdout.flush
|
|
23
|
+
else
|
|
24
|
+
SvelteOnRails::Lib::Utils.secure_debug_log("Initializing SSR client")
|
|
25
|
+
SvelteOnRails::SsrServer.instance
|
|
26
|
+
SvelteOnRails::Lib::Utils.secure_debug_log("Initializing SSR client finished")
|
|
27
|
+
end
|
|
22
28
|
|
|
23
|
-
# if defined?(Rake) && Rake.respond_to?(:application) && Rake.application.top_level_tasks.any?
|
|
24
|
-
# puts "Rake top level tasks!"
|
|
25
|
-
# else
|
|
26
|
-
#
|
|
27
|
-
# SvelteOnRails::Lib::Utils.secure_debug_log("Initializing SSR client")
|
|
28
|
-
# SvelteOnRails::SsrServer.instance
|
|
29
|
-
# SvelteOnRails::Lib::Utils.secure_debug_log("Initializing SSR client finished")
|
|
30
|
-
#end
|
|
31
|
-
|
|
32
|
-
# end
|
|
33
|
-
# else
|
|
34
|
-
# SvelteOnRails::Lib::Utils.secure_debug_log("Skipping SSR client (not a web server boot)")
|
|
35
|
-
# end
|
|
36
29
|
end
|
|
37
30
|
end
|
|
38
31
|
|
|
39
|
-
# initializer "svelte-on-rails.initialize_ssr_client" do
|
|
40
|
-
# SvelteOnRails::Lib::Utils.secure_debug_log("calling Initializing SSR client")
|
|
41
|
-
# SvelteOnRails::SsrServer.instance
|
|
42
|
-
# SvelteOnRails::Lib::Utils.secure_debug_log("Initializing SSR client finished")
|
|
43
|
-
# end
|
|
44
|
-
|
|
45
32
|
initializer 'svelte_on_rails.active_record_extensions' do
|
|
46
33
|
ActiveSupport.on_load(:active_record) do
|
|
47
34
|
|
|
@@ -32,22 +32,25 @@ module SvelteOnRails
|
|
|
32
32
|
@node_bin = SvelteOnRails::Configuration.instance.node_bin_path
|
|
33
33
|
@ssr_server_bin_path = SvelteOnRails::Configuration.instance.ssr_server_bin_path
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
# if !defined?(Rails::Server)
|
|
37
|
-
# SvelteOnRails::Lib::Utils.secure_debug_log("Rails Server is not yet defined, SSR Server cannot be started because of initializing too early")
|
|
38
|
-
# else
|
|
35
|
+
File.delete(restart_marker_file) if File.exist?(restart_marker_file)
|
|
39
36
|
|
|
40
|
-
|
|
37
|
+
if @use_ssr_server
|
|
38
|
+
# if !defined?(Rails::Server)
|
|
39
|
+
# SvelteOnRails::Lib::Utils.secure_debug_log("Rails Server is not yet defined, SSR Server cannot be started because of initializing too early")
|
|
40
|
+
# else
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
SvelteOnRails::Lib::Utils.secure_debug_log("SSR Server NOT used => @use_ssr_server #{defined?(Rails::Server)}")
|
|
42
|
+
SvelteOnRails::Lib::Utils.secure_debug_log("SOR using svelte-ssr-server called, now starting node-server...")
|
|
43
|
+
|
|
44
|
+
start_node_server!
|
|
45
|
+
# end
|
|
46
|
+
at_exit do
|
|
47
|
+
kill_my_server
|
|
48
|
+
File.delete(restart_marker_file) if File.exist?(restart_marker_file)
|
|
50
49
|
end
|
|
50
|
+
else
|
|
51
|
+
SvelteOnRails::Lib::Utils.secure_debug_log("SSR Server NOT used => @use_ssr_server #{@use_ssr_server}")
|
|
52
|
+
SvelteOnRails::Lib::Utils.secure_debug_log("SSR Server NOT used => @use_ssr_server #{defined?(Rails::Server)}")
|
|
53
|
+
end
|
|
51
54
|
|
|
52
55
|
end
|
|
53
56
|
|
|
@@ -72,7 +75,9 @@ module SvelteOnRails
|
|
|
72
75
|
response = socket.read
|
|
73
76
|
socket.close
|
|
74
77
|
rescue => e
|
|
75
|
-
Thread.new
|
|
78
|
+
# Thread.new do
|
|
79
|
+
restart_my_server('Restart-after-failure')
|
|
80
|
+
# end
|
|
76
81
|
if e.is_a?(Errno::ECONNREFUSED)
|
|
77
82
|
SvelteOnRails::Lib::Utils.error_log(
|
|
78
83
|
:ssr_server_unreachable,
|
|
@@ -178,7 +183,7 @@ module SvelteOnRails
|
|
|
178
183
|
|
|
179
184
|
start = Time.now
|
|
180
185
|
cmd = [
|
|
181
|
-
"SVELTE_SSR_SERVER_STARTED_BY
|
|
186
|
+
"SVELTE_SSR_SERVER_STARTED_BY=#{started_by}",
|
|
182
187
|
@node_bin,
|
|
183
188
|
@ssr_server_bin_path,
|
|
184
189
|
@socket_path
|
|
@@ -249,19 +254,22 @@ module SvelteOnRails
|
|
|
249
254
|
|
|
250
255
|
end
|
|
251
256
|
|
|
252
|
-
def restart_my_server
|
|
253
|
-
|
|
257
|
+
def restart_my_server(tag = nil)
|
|
258
|
+
|
|
259
|
+
marker = restart_marker_file
|
|
260
|
+
return if File.exist?(marker) && File.mtime(marker) > 1.minute.ago
|
|
254
261
|
|
|
255
|
-
|
|
262
|
+
FileUtils.mkdir_p(marker.dirname)
|
|
263
|
+
File.open(marker, "a") { |f| f.puts(Time.now.utc.iso8601) }
|
|
264
|
+
count = File.read(marker).lines.count
|
|
265
|
+
|
|
266
|
+
msg = "Restarting SSR server (#{tag})"
|
|
256
267
|
Rails.logger.error(msg)
|
|
257
268
|
SvelteOnRails::Lib::Utils.secure_debug_log("[ERROR] #{msg}")
|
|
258
269
|
|
|
259
|
-
@server_restarted_count ||= 0
|
|
260
|
-
@server_restarted_count += 1
|
|
261
270
|
kill_my_server
|
|
262
271
|
begin
|
|
263
|
-
start_node_server!("
|
|
264
|
-
@server_restarted_time = Time.now
|
|
272
|
+
start_node_server!("#{tag.gsub(' ','-')+'-' if tag}#{count}")
|
|
265
273
|
rescue
|
|
266
274
|
end
|
|
267
275
|
end
|
|
@@ -284,6 +292,10 @@ module SvelteOnRails
|
|
|
284
292
|
|
|
285
293
|
private
|
|
286
294
|
|
|
295
|
+
def restart_marker_file
|
|
296
|
+
Rails.root.join("tmp", "ssr_server_last_restart")
|
|
297
|
+
end
|
|
298
|
+
|
|
287
299
|
def default_ssr_url
|
|
288
300
|
"unix://#{socket_path}"
|
|
289
301
|
end
|
|
@@ -388,24 +400,23 @@ module SvelteOnRails
|
|
|
388
400
|
def ssr_server_ppid_file
|
|
389
401
|
Rails.root.join("tmp", "pids", 'svelte_on_rails.ppid')
|
|
390
402
|
end
|
|
403
|
+
|
|
391
404
|
def socket_path(ppid: Process.ppid)
|
|
392
|
-
app_sock = Rails.root.join("tmp/sockets/#{@socket_namespace}-#{ppid}.sock")
|
|
405
|
+
app_sock = Rails.root.join("tmp/sockets/#{@socket_namespace}-#{ppid}.sock")
|
|
393
406
|
FileUtils.mkdir_p(File.dirname(app_sock))
|
|
394
407
|
|
|
395
|
-
return app_sock if app_sock.length < 104
|
|
408
|
+
return app_sock if app_sock.to_s.length < 104
|
|
396
409
|
|
|
397
410
|
# Fallback: socket paths > 104 chars are unreliable on macOS/BSD
|
|
398
411
|
FileUtils.rm_f(app_sock) if File.exist?(app_sock)
|
|
399
412
|
dir = File.expand_path("/tmp/svelte")
|
|
400
413
|
FileUtils.mkdir_p(dir)
|
|
401
414
|
FileUtils.chmod(0777, dir)
|
|
402
|
-
fallback = "#{dir}/#{@socket_namespace}-#{ppid}.sock"
|
|
415
|
+
fallback = Pathname.new("#{dir}/#{@socket_namespace}-#{ppid}.sock")
|
|
403
416
|
start_server_log(nil, "sockets longer than 104 chars are risky, fallback to: #{fallback}")
|
|
404
417
|
fallback
|
|
405
418
|
end
|
|
406
419
|
|
|
407
|
-
|
|
408
|
-
|
|
409
420
|
end
|
|
410
421
|
|
|
411
422
|
class SsrError < StandardError; end
|
|
@@ -13,6 +13,8 @@ namespace :svelte_on_rails do
|
|
|
13
13
|
server_helpers = SvelteOnRails::SsrServerHelpers.new
|
|
14
14
|
socket_path = server_helpers.socket_path(ppid: ppid)
|
|
15
15
|
|
|
16
|
+
rails_env_warning(socket_path)
|
|
17
|
+
|
|
16
18
|
puts '=' * 80
|
|
17
19
|
puts "Svelte on Rails SSR Server"
|
|
18
20
|
puts "Rails env: #{Rails.env.upcase}"
|
|
@@ -30,6 +32,8 @@ namespace :svelte_on_rails do
|
|
|
30
32
|
else
|
|
31
33
|
puts label('Process.ppid') + ppid.to_s
|
|
32
34
|
puts label('Socket') + socket_path.to_s
|
|
35
|
+
puts 'Command for check the server instance:'
|
|
36
|
+
puts " • curl --unix-socket #{socket_path} http://localhost"
|
|
33
37
|
end
|
|
34
38
|
puts
|
|
35
39
|
puts '=' * 80
|
|
@@ -40,16 +44,49 @@ namespace :svelte_on_rails do
|
|
|
40
44
|
puts " • #{line}"
|
|
41
45
|
end
|
|
42
46
|
puts
|
|
43
|
-
puts 'Command for check the server instance:'
|
|
44
|
-
puts " • curl --unix-socket #{socket_path} http://localhost"
|
|
45
47
|
|
|
46
48
|
end
|
|
47
49
|
|
|
50
|
+
def rails_env_warning(socket_path)
|
|
51
|
+
envs = guessed_rails_envs(socket_path.dirname)
|
|
52
|
+
if envs == [Rails.env]
|
|
53
|
+
# All good
|
|
54
|
+
elsif envs.include?(Rails.env)
|
|
55
|
+
puts '*' * 80
|
|
56
|
+
puts "INFO: Based on the socket paths #{socket_path.dirname},"
|
|
57
|
+
puts "this Rails app may run in #{envs.to_s.join(' or ')}."
|
|
58
|
+
puts "You are running as #{Rails.env} (Rails.env) which may be right."
|
|
59
|
+
puts '*' * 80
|
|
60
|
+
puts
|
|
61
|
+
else
|
|
62
|
+
puts '*' * 80
|
|
63
|
+
puts "WARNING: You are running as #{Rails.env} (Rails.env)"
|
|
64
|
+
puts "But the rails app seems to run in #{envs.to_s.join(' or ')}"
|
|
65
|
+
puts '*' * 80
|
|
66
|
+
puts
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
48
70
|
def label(msg)
|
|
49
71
|
l = msg.length
|
|
50
72
|
" #{msg}:"[0..20] + (msg.length > 22 ? ':' : '') + ' ' * (20 - l)
|
|
51
73
|
end
|
|
52
74
|
|
|
75
|
+
def guessed_rails_envs(dir)
|
|
76
|
+
envs_dir = Rails.root.join('config', 'environments')
|
|
77
|
+
return [] unless File.directory?(envs_dir) && File.directory?(dir)
|
|
78
|
+
|
|
79
|
+
possible_envs = Dir.children(envs_dir)
|
|
80
|
+
.select { |f| f.end_with?('.rb') }
|
|
81
|
+
.map { |f| File.basename(f, '.rb') }
|
|
82
|
+
|
|
83
|
+
entries = Dir.children(dir)
|
|
84
|
+
|
|
85
|
+
possible_envs.select do |env|
|
|
86
|
+
entries.any? { |entry| entry.include?("-#{env}-") }
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
53
90
|
end
|
|
54
91
|
|
|
55
92
|
Rake::Task["assets:precompile"].enhance ["svelte_on_rails:precompile"]
|