我的Rails应用程序中有一个编译按钮
get_pdf_cmd = ['ssh', '-i', '~/.ssh/id_rsa', '-o', 'StrictHostKeyChecking=no', 'root@compile', '/bin/bash', '--login', '/compile.sh', container['host'] ]
Rails.logger.info(get_pdf_cmd)
stdin, stdout_and_stderr, wait_thr = Open3.popen2e({}, get_pdf_cmd.join(" "))
Rails.logger.info stdout_and_stderr.gets(nil)
stdout_and_stderr.close
stdin.close
exit_code = wait_thr.value
当发生这种情况时,整个Rails应用程序都会挂起并且根本没有响应。
问题
如何在SSH命令运行时阻止Rails挂起?
答案 0 :(得分:1)
正如评论中已经指出的那样,最好的做法是使用后台程序来完成繁重的工作。
rails在rails可用的许多作业框架之上提供了一个抽象层。在指南http://guides.rubyonrails.org/active_job_basics.html
中阅读有关此主题的更多信息如果您的rails应用程序依赖于此类操作的结果,您需要实现某种轮询或使用现代客户端通信方式,如ActionCable http://guides.rubyonrails.org/action_cable_overview.html
fork
也是可能的,但不建议在运行的rails应用程序中使用它。