我正在从浏览器启动长时间运行的进程,并在完成后显示结果。我在我的控制器中定义了:
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
parent 中的请求正确完成。但是,在孩子中,总是有一个“500 内部服务器错误”。rails 报告“在 227192 毫秒内完成 500 内部服务器错误”。我猜这是因为子进程的请求响应周期没有完成,因为子进程中有一个“退出”。我该如何解决?
这是执行长时间运行的进程的正确方法吗?有没有更好的方法呢?
当孩子正在运行时,如果我执行 "
ps -e | grep rails
" ,我会看到有两个 "rails server" 实例。(我使用命令“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
这是否意味着有两台服务器正在运行?现在如何处理请求?请求不会转到第二台服务器吗?
谢谢你帮助我。