62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/webbynode/ssh.rb', line 62
def console(app_name)
connect
input = 'something'
ch = @conn.open_channel do |ch|
ch.request_pty do |ch, success|
abort "Error requesting pty" unless success
end
ch.env "PATH", "/usr/bin:/usr/local/bin:/opt/ruby-enterprise/bin"
ch.exec "cd #{app_name} && rails console production" do |ch, success|
abort "Could not connect to rails console" unless success
ch.on_data do |ch, data|
next if data.chomp == input.chomp || data.chomp == ''
if data =~ /^irb(.*)[\>|\*] /
prompt = ''
data.chars.each_with_index do |s, i|
if s =~ /^irb(.*)[\>|\*] /
prompt = s
else
print s unless s.chomp == input.chomp
end
end
input = "#{Readline.readline(prompt, true)}\n"
ch.send_data(input)
else
puts data
end
end
ch.on_extended_data do |ch, type, data|
puts data
end
end
@conn.loop
end
begin
ch.wait
rescue SystemExit, Interrupt
ch.send_data(Net::SSH::Connection::Term::VINTR)
ch.send_data("quit\n")
puts ""
puts "Console done."
rescue Exception => e
puts "Error: #{$!.message}"
end
end
|