18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'app/controllers/web_rake/tasks_controller.rb', line 18
def execute
task_name = params[:id].gsub('__', ':')
unless find_task
redirect_to root_path, alert: "Task not found"
return
end
start_time = Time.current
output = []
errors = []
success = false
begin
original_stdout = $stdout
original_stderr = $stderr
$stdout = StringIO.new
$stderr = StringIO.new
rake_command = "bundle exec rake #{task_name}"
stdout_str, stderr_str, status = Open3.capture3(rake_command)
output = stdout_str.split("\n")
errors = stderr_str.split("\n") if stderr_str.present?
success = status.success?
rescue => e
errors << e.message
errors.concat(e.backtrace) if Rails.env.development?
ensure
$stdout = original_stdout if original_stdout
$stderr = original_stderr if original_stderr
end
end_time = Time.current
duration = (end_time - start_time).round(2)
task = OpenStruct.new(name: task_name)
render :execute, locals: {
task: task,
output: output,
errors: errors,
success: success,
duration: duration
}
end
|