Ruby on rails 系统和fork调用正在阻塞端口3000
我使用的是ruby 1.8.7和rails 2.3.4。我正在开发一个插件,所以我没有太多的回旋余地 在我的控制器中,我需要调用一个rake任务。rake任务将需要更长的时间才能完成,因此我将遵循其中提到的方法 这个解决方案非常有效,一切都很好。我知道这个解决方案在windows上不起作用,我同意 我在3000端口启动了服务器。调用了控制器,该控制器在后台启动了rake任务。但是,如果我在脚本/服务器上按ctrl+c组合键,并尝试重新启动服务器,则会出现此错误 地址已在使用中-绑定(2)(错误号::EADDRINUSE) 然后我改变了我的代码来做这件事Ruby on rails 系统和fork调用正在阻塞端口3000,ruby-on-rails,ruby,Ruby On Rails,Ruby,我使用的是ruby 1.8.7和rails 2.3.4。我正在开发一个插件,所以我没有太多的回旋余地 在我的控制器中,我需要调用一个rake任务。rake任务将需要更长的时间才能完成,因此我将遵循其中提到的方法 这个解决方案非常有效,一切都很好。我知道这个解决方案在windows上不起作用,我同意 我在3000端口启动了服务器。调用了控制器,该控制器在后台启动了rake任务。但是,如果我在脚本/服务器上按ctrl+c组合键,并尝试重新启动服务器,则会出现此错误 地址已在使用中-绑定(2)(错误号
fork do
system "rake #{task} &"
end
还是一样的问题
有人知道我该如何解决端口3000被阻塞的问题吗。另外,解释rake任务为何阻塞端口3000也会有所帮助。来源:
Kernel.fork[{block}]=>fixnum或nil
Process.fork[{block}]=>fixnum或nil
创建一个子流程。如果一个街区是
指定时,该块将在
子流程和子流程
以零状态终止。
否则,fork调用将返回
两次,一次在父级,返回
子进程的进程ID,以及一次
在儿童中,返回零。孩子
进程可以使用Kernel.exit退出!到
避免运行任何at_退出功能。
父进程应使用process.wait收集
其子项的终止状态
或者使用Process.detach进行注册
对他们的地位不感兴趣;
否则,操作系统可能会
累积僵尸进程。
线程调用叉是所创建子进程中的唯一线程。fork不复制其他线程。
基于以下评论的最终解决方案:
command = "rake #{task} #{args.join(' ')}"
p1 = Process.fork { system(command) }
Process.detach(p1)
发件人:
Kernel.fork[{block}]=>fixnum或nil
Process.fork[{block}]=>fixnum或nil
创建一个子流程。如果一个街区是
指定时,该块将在
子流程和子流程
以零状态终止。
否则,fork调用将返回
两次,一次在父级,返回
子进程的进程ID,以及一次
在儿童中,返回零。孩子
进程可以使用Kernel.exit退出!到
避免运行任何at_退出功能。
父进程应使用process.wait收集
其子项的终止状态
或者使用Process.detach进行注册
对他们的地位不感兴趣;
否则,操作系统可能会
累积僵尸进程。
线程调用叉是所创建子进程中的唯一线程。fork不复制其他线程。
基于以下评论的最终解决方案:
command = "rake #{task} #{args.join(' ')}"
p1 = Process.fork { system(command) }
Process.detach(p1)
不工作。修改后的代码p1=fork{system(command)}Process.detach(p1)仍然在使用地址。为了确保没有松散的结尾,您可以将fork更改为Process.fork吗?Process.fork也有同样的问题。在调用结束时删除(&P)。是的,这解决了问题。您应该编辑您的答案,并将此代码作为最终答案,以便其他人可以清楚地看到它。command=“rake#{task}{args.join(“”)}”p1=Process.fork{system(command)}Process.detach(p1)不工作。修改后的代码p1=fork{system(command)}Process.detach(p1)仍然在使用地址。为了确保没有松散的结尾,您可以将fork更改为Process.fork吗?Process.fork也有同样的问题。在调用结束时删除(&P)。是的,这解决了问题。您应该编辑您的答案,并将此代码作为最终答案,以便其他人可以清楚地看到它。command=“rake#{task}{args.join(“”)}”p1=Process.fork{system(command)}Process.detach(p1)