【发布时间】:2014-03-01 23:43:45
【问题描述】:
在 rails 3.x 应用程序中,我正在使用 net::ssh 并向远程 pc 运行一些命令。我想将实时日志显示到用户的浏览器。例如,如果两个命令在 net 中运行: :ssh 执行,即 echo "Hello",echo "Bye" 被传递,然后“Hello”应该在执行后立即显示在浏览器中。这是我在 ruby on rails 应用程序中用于 ssh 连接和运行命令的代码
Net::SSH.start( @servers['local'] , @machine_name, :password => @machine_pwd, :timeout => 30) do |ssh|
ssh.open_channel do |channel|
channel.request_pty
channel.exec("echo 'ssh started'")
channel.exec("ruby -v")
channel.exec("rails -v")
channel.exec("echo 'ssh Finished'")
channel.on_close do |ch|
puts "****shell terminated****"
end
channel.on_eof do |ch|
puts "****remote end is done sending data****"
end
channel.on_extended_data do |ch, type, data|
puts "****got stderr****: #{data.inspect}"
end
channel.on_data do |channel, data|
puts "****ondata****: #{data} \n"
puts "****channel****: #{channel} \n"
$logs << data # this data to be sent immediately to browser in each go
end
ssh.loop
end
end
这里的on_data是在每一个命令执行的时候发送数据,我需要这些数据立即发送到浏览器。有什么办法可以做到这一点。这样我就可以在前端浏览器中实现实时日志了。谢谢!
【问题讨论】:
标签: ruby-on-rails ruby ssh eventmachine net-ssh