Ruby on rails 系统和fork调用正在阻塞端口3000

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)(错误号

我使用的是ruby 1.8.7和rails 2.3.4。我正在开发一个插件,所以我没有太多的回旋余地

在我的控制器中,我需要调用一个rake任务。rake任务将需要更长的时间才能完成,因此我将遵循其中提到的方法

这个解决方案非常有效,一切都很好。我知道这个解决方案在windows上不起作用,我同意

我在3000端口启动了服务器。调用了控制器,该控制器在后台启动了rake任务。但是,如果我在脚本/服务器上按ctrl+c组合键,并尝试重新启动服务器,则会出现此错误

地址已在使用中-绑定(2)(错误号::EADDRINUSE)

然后我改变了我的代码来做这件事

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)