spring 4.6.0 → 4.7.0

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: f386aff68c6b8feab1d79a933df930e6c47bf8d2f5f3610c7c483954e1b97cff
4
- data.tar.gz: fb1ef130a243970266279570dad57c259ecd828cfab6b1043482ed429234e363
3
+ metadata.gz: a37d78748e084596d151cde2918d30799c8dfe9e10e029920ece9e9eee8118ad
4
+ data.tar.gz: c47e0897d3938b7350245854672812436505379cc498638c3eca9e2d52537fe6
5
5
  SHA512:
6
- metadata.gz: da2a3fbbb088ca721ed27128e0a60be6b8946b519ae4580fb7c99cc76f3052063b24bbacce932db0212a9308094e1e392e7a7c6937526dc19d940c896c4c4a1d
7
- data.tar.gz: d712161465b1217b783046ec10ad2694c65bf7897ab78cc7e97d1b6c33ae0a124dc949f9dd056755d5aaf40890c502ee617e3ad2338cbe8551731ae8c29b1774
6
+ metadata.gz: cda176e1dd4d22cabb680cb85c4fd562c256f8fb3dc04f9064fc61f910cfb384f044f63bee74a424501505b62f80e0746f6c05bddf327c6be0150f12cc678a3f
7
+ data.tar.gz: e8b1675241b3fc42c52eabb9e2f501d4abae16c35ae3e3d19080de332f3d28b258b7245c127264326871f09c35c333a3b71fcfb8fbbfecdc87648a72e1328c14
@@ -6,6 +6,7 @@ module Spring
6
6
  module Client
7
7
  class Run < Command
8
8
  FORWARDED_SIGNALS = %w(INT QUIT USR1 USR2 INFO WINCH) & Signal.list.keys
9
+ ServerReadTimeout = Class.new(StandardError)
9
10
 
10
11
  attr_reader :server
11
12
 
@@ -120,13 +121,27 @@ module Spring
120
121
  end
121
122
 
122
123
  def verify_server_version
123
- unless IO.select([server], [], [], Spring.connect_timeout)
124
- raise "Error connecting to Spring server"
124
+ begin
125
+ line = read_server_line
126
+ rescue ServerReadTimeout
127
+ if waiting_for_server_boot?
128
+ begin
129
+ # Try again, but with same timeout as booting, as server might still be booting
130
+ # from another client starting it.
131
+ line = read_server_line(Spring.boot_timeout)
132
+ rescue ServerReadTimeout
133
+ reboot_or_raise_connection_error
134
+ return
135
+ end
136
+ else
137
+ reboot_or_raise_connection_error
138
+ return
139
+ end
125
140
  end
126
141
 
127
- line = server.gets
128
- unless line
129
- raise "Error connecting to Spring server"
142
+ if line.nil?
143
+ reboot_or_raise_connection_error
144
+ return
130
145
  end
131
146
 
132
147
  server_version = line.chomp
@@ -145,6 +160,25 @@ module Spring
145
160
  end
146
161
  end
147
162
 
163
+ def read_server_line(timeout = Spring.connect_timeout)
164
+ raise ServerReadTimeout if IO.select([server], [], [], timeout).nil?
165
+
166
+ server.gets
167
+ end
168
+
169
+ def waiting_for_server_boot?
170
+ !server_booted? && env.server_running?
171
+ end
172
+
173
+ def reboot_or_raise_connection_error
174
+ if server_booted?
175
+ raise "Error connecting to Spring server"
176
+ else
177
+ stop_server
178
+ cold_run
179
+ end
180
+ end
181
+
148
182
  def connect_to_application(client)
149
183
  server.send_io client
150
184
  send_json server, "args" => args, "default_rails_env" => default_rails_env, "spawn_env" => spawn_env, "reset_env" => reset_env
@@ -1,3 +1,3 @@
1
1
  module Spring
2
- VERSION = "4.6.0"
2
+ VERSION = "4.7.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spring
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.0
4
+ version: 4.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Leighton