次のように、コントローラーから casperJS スクリプトを起動しています。
output = `casperjs #{path_to_file} '#{url}#'`
また、場合によっては、いくつかの理由で casperjs スクリプトがハングしたり、時間がかかることがあります。とにかくプロセスを強制終了して制御するために、コントローラーにタイムアウトを設定できるかどうか疑問に思っています。それは可能ですか?
次のように、コントローラーから casperJS スクリプトを起動しています。
output = `casperjs #{path_to_file} '#{url}#'`
また、場合によっては、いくつかの理由で casperjs スクリプトがハングしたり、時間がかかることがあります。とにかくプロセスを強制終了して制御するために、コントローラーにタイムアウトを設定できるかどうか疑問に思っています。それは可能ですか?
require 'timeout'
Timeout.timeout(<seconds>) do
output = `casperjs #{path_to_file} '#{url}#'`
end
スクリプトが指定された時間内に終了しない場合、これにより Timeout::Error 例外が発生します
編集(タイムアウト後にプロセスを強制終了するため)
require 'timeout'
pipe_cmd_in, pipe_cmd_out = IO.pipe
pid = Process.spawn("casperjs #{path_to_file} '#{url}#'", :out => pipe_cmd_out, :err => pipe_cmd_out)
Timeout.timeout(<seconds>) do
Process.wait(pid)
pipe_cmd_out.close
output = pipe_cmd_in.read;
end
rescue Timeout::Error
Process.kill('TERM', pid)
end
テミネーターの宝石も見てください。処理するシステムコールが多い場合に役立ちます