有些命令会挂起我的Ruby web应用程序
我正在使用Rails和Sinatra,我想在服务器上执行命令。这些命令是从表单中输入的。问题是,如果我输入一个需要输入的命令,我的整个应用程序就会挂起。下面是我用来执行它们的代码:有些命令会挂起我的Ruby web应用程序,ruby,multithreading,sinatra,command-execution,Ruby,Multithreading,Sinatra,Command Execution,我正在使用Rails和Sinatra,我想在服务器上执行命令。这些命令是从表单中输入的。问题是,如果我输入一个需要输入的命令,我的整个应用程序就会挂起。下面是我用来执行它们的代码: @threads << Thread.new do Thread.current["buffer"] = "" puts "starting #{params[:command]}" IO.popen(params[:command]) do |io| io.eac
@threads << Thread.new do
Thread.current["buffer"] = ""
puts "starting #{params[:command]}"
IO.popen(params[:command]) do |io|
io.each_line {|l| Thread.current["buffer"] += l}
end
end
@threads尝试将/dev/null管道化到子进程中:
IO.popen("#{params[:command]} </dev/null") do ...
IO.popen(“#{params[:command]}解决方案:我刚刚记得去年我在这里询问了Ruby线程的行为:。我尝试使用1.9.1解释器运行Sinatra,但效果很好。但是在1.8.6下它没有效果。我想你的意思是“如果我输入一个需要输入的命令。。。“不是吗?您是否等待线程稍后完成join
?这段代码对我来说似乎没问题。@vava我用答案编辑了问题。”。