Alcuni comandi appendere il mio Rubino web app
-
23-09-2019 - |
Domanda
Sto giocando intorno con Rails & Sinatra, e voglio eseguire comandi sul server. Tali comandi vengono immessi da un formulario. Il fatto è che, se entro un comando che si aspetta di ingresso, tutta la mia app si blocca. Ecco il codice che sto usando per eseguirli:
@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
questo funziona bene per i comandi semplici come ls
... ma per esempio se entro pause
che aspettano all'utente di premere un tasto per continuare, tutto si blocca. Come posso ottenere intorno a questo?
EDIT: ho appena ricordato ho chiesto lo scorso anno sul comportamento filo di Ruby qui: Perché questa corsa come esso non è infilato? . Ho provato a fare funzionare Sinatra utilizzando un interprete 1.9.1 e ha funzionato. Sotto 1.8.6 non è così però. Un mod può chiudere questo problema, se vuole.
Soluzione 2
Soluzione: ho appena ricordato ho chiesto lo scorso anno sul comportamento filo di Ruby qui: Perché questa corsa come esso non è infilato? . Ho provato a fare funzionare Sinatra utilizzando un interprete 1.9.1 e ha funzionato. Sotto 1.8.6 lo fa non però.
Altri suggerimenti
Prova tubazioni / dev / null nel vostro processo figlio:
IO.popen("#{params[:command]} </dev/null") do ...