Rails & Sinatra をいじっていて、サーバー上でコマンドを実行したいと考えています。これらのコマンドはフォームから入力されます。問題は、入力を必要とするコマンドを入力すると、アプリ全体がハングすることです。それらを実行するために使用しているコードは次のとおりです。
@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
これは...のような単純なコマンドではls
問題なく機能しますが、たとえばpause
、ユーザーがキーを押して続行することを期待するものを入力すると、すべてがハングします。どうすればそれを回避できますか?
編集: 昨年、ここで Rubyスレッドの動作について質問したことを思い出しました: . 1.9.1 インタープリターを使用して Sinatra を実行してみましたが、うまくいきました。ただし、1.8.6 ではそうではありません。モッドは、必要に応じてこの質問を閉じることができます。