Skip to content

Commit 28715d7

Browse files
authored
Merge pull request #704 from gmcgibbon/reset_on_env
Add Spring.reset_on_env
2 parents db95d8d + 7e30570 commit 28715d7

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

lib/spring/client/run.rb

+10-2
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def run
7373
def boot_server
7474
env.socket_path.unlink if env.socket_path.exist?
7575

76-
pid = Process.spawn(gem_env, env.server_command, out: File::NULL)
76+
pid = Process.spawn(server_process_env, env.server_command, out: File::NULL)
7777
timeout = Time.now + BOOT_TIMEOUT
7878

7979
@server_booted = true
@@ -107,6 +107,14 @@ def gem_env
107107
}
108108
end
109109

110+
def reset_env
111+
ENV.slice(*Spring.reset_on_env)
112+
end
113+
114+
def server_process_env
115+
reset_env.merge(gem_env)
116+
end
117+
110118
def stop_server
111119
server.close
112120
@server = nil
@@ -141,7 +149,7 @@ def verify_server_version
141149

142150
def connect_to_application(client)
143151
server.send_io client
144-
send_json server, "args" => args, "default_rails_env" => default_rails_env, "spawn_env" => spawn_env
152+
send_json server, "args" => args, "default_rails_env" => default_rails_env, "spawn_env" => spawn_env, "reset_env" => reset_env
145153

146154
if IO.select([server], [], [], CONNECT_TIMEOUT)
147155
server.gets or raise CommandNotFound

lib/spring/configuration.rb

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ def spawn_on_env
3636
@spawn_on_env ||= []
3737
end
3838

39+
def reset_on_env
40+
@reset_on_env ||= []
41+
end
42+
3943
def verify_environment
4044
application_root_path
4145
end

lib/spring/server.rb

+9-2
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,15 @@ def serve(client)
5959
app_client = client.recv_io
6060
command = JSON.load(client.read(client.gets.to_i))
6161

62-
args, default_rails_env, spawn_env = command.values_at('args', 'default_rails_env', 'spawn_env')
62+
args, default_rails_env, spawn_env, reset_env = command.values_at('args', 'default_rails_env', 'spawn_env', 'reset_env')
6363

6464
if Spring.command?(args.first)
65+
application = @applications[rails_env_for(args, default_rails_env, spawn_env)]
66+
reset_if_env_changed(application, reset_env)
67+
6568
log "running command #{args.first}"
6669
client.puts
67-
client.puts @applications[rails_env_for(args, default_rails_env, spawn_env)].run(app_client)
70+
client.puts application.run(app_client)
6871
else
6972
log "command not found #{args.first}"
7073
client.close
@@ -138,6 +141,10 @@ def set_process_title
138141

139142
private
140143

144+
def reset_if_env_changed(application, reset_env)
145+
application.stop if ENV.slice(*reset_env.keys) != reset_env
146+
end
147+
141148
def default_env
142149
Env.new(log_file: default_log_file)
143150
end

0 commit comments

Comments
 (0)