我想让用户从 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('')
是否有任何现成的 gem ?我可以让 ajax 请求调用运行命令的文件,输出到缓冲区,然后我可以在脚本运行时刷新缓冲区并将响应发送回它运行的页面吗?如果有帮助,我什至可以使用 iframe。
非常感谢任何帮助或指出正确的方向!
最佳答案
为此,您需要一个延迟作业或 sidekick 对象 - 以实际运行脚本。
使用 ruby IO.popen
方法执行命令并读取输出,同时将其刷新到数据库中。
在您的 Web 应用程序上,您只需通过 ajax 从该数据库对象中轮询数据。
关于ruby-on-rails - Rails - 如何运行 cmd 行脚本并实时显示输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698637/