ブラウザから長時間実行されるプロセスを開始し、完了後に結果を表示しています。私は自分のコントローラーで定義しました:
def runthejob
pid = Process.fork
if pid.nil? then
#Child
output = execute_one_hour_job()
update_output_in_database(output)
# Exit here as this child process shouldn't continue anymore
exit
else
#Parent
Process.detach(pid)
#send response - job started...
end
親のリクエストは正しく完了します。ただし、子では、常に「500内部サーバーエラー」が発生します。railsは、「227192msで500の内部サーバーエラーを完了しました」と報告します。これは、子に「出口」があるため、子プロセスの要求応答サイクルが完了していないために発生すると推測しています。これを修正するにはどうすればよいですか?
これは、長時間実行されるプロセスを実行する正しい方法ですか?それを行うためのより良い方法はありますか?
子供が走っているときに「
ps -e | grep rails
」を実行すると、「railsserver」のインスタンスが2つあることがわかります。(コマンド "rails server
"を使用してRailsサーバーを起動します。)ps -e | grep rails
75678 ttys002 /Users/xx/ruby-1.9.3-p194/bin/ruby script/rails server
75696 ttys002 /Users/xx/ruby-1.9.3-p194/bin/ruby script/rails server
これは、2台のサーバーが実行されていることを意味しますか?リクエストは現在どのように処理されていますか?リクエストは2番目のサーバーに送信されませんか?
私を助けてくれてありがとう。