Rails - 如何运行命令行脚本并实时显示输出?

时间:2014-07-11 13:13:40

标签: ruby-on-rails ruby

我想让用户从cmd行中选择要运行的脚本,并在实时(接近)实时运行时查看脚本的输出。我知道这不安全,这是一个小团队用来提供自助服务的内部工具。

这是一个ruby脚本的快速示例,该脚本在cmd行上运行并实时显示输出。我无法弄清楚的是如何让它从rails工作。

cmd = %q[echo '3...'; sleep 1;
         echo '2...'; sleep 1;
         echo '1...'; sleep 1;
         echo 'Liftoff!']

puts '------ beginning command ------'
output_log = []
IO.popen(cmd).each do |line|
  puts line
  output_log << "[#{Time.now}] #{line}"
end.close # Without close, you won't be able to access $?
puts '------ done with command ------'

puts "The command's exit code was: #{$?.exitstatus}"
puts 'Here is the log:'
puts output_log.join('')

这有没有现有的宝石?我可以让ajax请求调用一个运行命令的文件,输出到缓冲区,然后我可以在脚本运行时刷新缓冲区并将响应发送回它运行的页面吗?如果它有帮助,我甚至可以使用iframe。

非常感谢任何帮助或指向正确的方向!

1 个答案:

答案 0 :(得分:0)

要执行此操作,您将需要延迟作业或sidekick对象 - 以实际运行脚本。 使用ruby IO.popen方法执行命令并读取输出并同时将其刷新到数据库中。 在您的Web应用程序中,您只需通过该数据库对象的ajax轮询数据。