私はサーバAでPHPスクリプトを実行しており、15分かかると終わります。私は、Webブラウザを介してスクリプトを実行し、(いくつかのPHPコマンドが終了すると)ブロック単位でブラウザに出力を送信します。ブロックの例については以下を参照してください。このスクリプトはDB2データベースを作成するため、合計でいくつかのステップが必要です。ajaxを介してphpスクリプトからの出力をsinatra re-streamできますか?
私は、AJAXを介してサーバーBのsinatraから同じスクリプトを実行します。それはうまく動作しますが、私はPHPスクリプトが終了したら、私はそれを呼び出すようにすべてのブロック(すべてのブロック)を取得します。
は、スクリプトが(ないシナトラから)ブラウザから直接起動されたかのように、それは同じように動作しますので、シナトラ/ AJAXが道を設定することができます方法はありますか?だから、Ajaxコールが終了したときに終了しなければ、すべてのブロックの結果を見ることができます。
HAMLファイル(抽出物)
:javascript
function loadXMLDoc2(mode)
{
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
document.getElementById("db2").innerHTML="<BLINK> processing</BLINK> "+mode+" procedure";
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("db2").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/ajaxdb2?mode="+mode,true);
xmlhttp.send();
}
%td
%button{:type => "button", :onclick => "loadXMLDoc2('create')"}
create DB2
%br
Rubyコード(抜粋)
get '/ajaxdb2?' do
execute_db2_script(params['mode'].downcase)
end
def execute_db2_script(mode)
if not (mode == 'clear')
db2_database = 'RATIONAL'
url = "http://db2express/imacs/radek/db2.rft/rationalTest.php?mode=#{mode}&database=#{db2_database}"
uri = URI.parse(url)
start = Time.new
response = Net::HTTP.start(uri.host, uri.port) do |http|
http.open_timeout = 5
http.read_timeout = 1500
http.request_get(uri.request_uri)
end
stop = Time.new
return "#{response.body} <BR>processed in #{stop - start} seconds"
else
return "DB2 results"
end
end
PHPコードサンプル(2blocks)
flush_buffers();
$output = array();
$shellOutput = exec("echo 'password' | sudo -su db2inst1 -S '/opt/ibm/db2/V9.7/bin/db2 deactivate database $databaseName'", $output);
echo "<pre>Output = " . print_r($output,1) . "</pre>";
if(strpos($output[0],'DB20000I') === false && strpos($output[0],'SQL1496W') === false && strpos($output[0],'SQL1013N') === false && strpos($output[0],'SQL30061N') === false){
echo("Could not deactivate database.");
}
flush_buffers();
$output = array();
$shellOutput = exec("sudo -su db2inst1 -S '/opt/ibm/db2/V9.7/bin/db2 drop database $databaseName'", $output);
echo "<pre>Output = " . print_r($output,1) . "</pre>";
if(strpos($output[0],'DB20000I The DROP DATABASE command completed successfully') === false && strpos($output[0],'SQL1013N') === false && strpos($output[0],'SQL30061N') === false){
echo("Dropping of the database was not successful.");
}
誰かが知っていますか? – Radek
PHPスクリプトとAJAXコードを投稿できますか?また、「ブラウザを介してスクリプトを実行し、ブロック単位で出力をブラウザに送信する」という意味がわかりません。私は、PHPスクリプトがあなたのサーバーに格納されていると仮定し、クライアント要求に応じてサーバーによって実行されます。 – jergason
@ Jergason:ほとんど新しい質問を読むことができます:-) – Radek