ruby-on-rails - Rails - 如何运行 cmd 行脚本并实时显示输出?

标签 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('')

是否有任何现成的 gem ?我可以让 ajax 请求调用运行命令的文件,输出到缓冲区,然后我可以在脚本运行时刷新缓冲区并将响应发送回它运行的页面吗?如果有帮助,我什至可以使用 iframe。

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

最佳答案

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

关于ruby-on-rails - Rails - 如何运行 cmd 行脚本并实时显示输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698637/

相关文章:

ruby-on-rails - send_file 后出现 DoubleRenderError

ruby-on-rails - 在 Rails 中,关键字 belongs_to、has_many 等实际上是做什么的?

mysql - 无法 gem 安装 do_mysql。 mysql目录不存在

javascript - 如何在Javascript中快速从字符串生成数组

ruby - 从 ruby​​ 的独家范围中获得最大值(value)的最快方法

ruby-on-rails - 当日志中没有错误消息时,如何在Heroku中诊断500错误?

ruby-on-rails - 我如何使用 postgresql 在 Rails 4 中对 ip 地址进行排序

ruby-on-rails - 创建时出现 Rails ajax 错误

ruby - 如何使用 axlsx (ruby) 为 excel 格式化整列

ruby-on-rails - Ruby on Rails - 如何正确映射和链接到新 Controller ?