Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么要跑步;“刀独厨”;使用并行gem会导致端口错误吗?_Ruby_Sockets_Parallel Processing_Chef Infra_Knife Solo - Fatal编程技术网

Ruby 为什么要跑步;“刀独厨”;使用并行gem会导致端口错误吗?

Ruby 为什么要跑步;“刀独厨”;使用并行gem会导致端口错误吗?,ruby,sockets,parallel-processing,chef-infra,knife-solo,Ruby,Sockets,Parallel Processing,Chef Infra,Knife Solo,我们正在尝试在远程机器上运行刀子单独烹饪命令。当我们在每台机器上按顺序执行该命令时,它不会打嗝。 我们尝试通过如下方式使用gem来并行化: Parallel.each(machines, in_threads => machines.size) do |machine| knife solo cook machine.user + ":" + machine.ip <options> end Parallel.each(机器,in_线程=>machi

我们正在尝试在远程机器上运行刀子单独烹饪命令。当我们在每台机器上按顺序执行该命令时,它不会打嗝。 我们尝试通过如下方式使用gem来并行化:

Parallel.each(machines, in_threads => machines.size) do |machine|
   knife solo cook machine.user + ":" + machine.ip <options>
end
Parallel.each(机器,in_线程=>machines.size)do|machine|
刀单独烹饪机器。用户+“:”+machine.ip
结束
执行此操作时,首先运行的线程将按预期执行。但是,其他线程不会执行并停止,错误为:“EADDRINUSE:Address ready in use-bind(2)for 127.0.0.1:8889”

我们在调用
knife solo cook
的同一位置输入netstat命令,以进行调查,发现端口8889上的侦听套接字已被第一个线程打开。 我们没有打开任何套接字,也没有发现任何迹象表明刀子或Net:SSH(刀子使用的)正在这样做

有人知道谁在打开这个插座吗?或者它是否有任何配置文件

谢谢

编辑:忘了提到,我们在呼叫
cook
之前也在为
knife solo-prepare
做同样的准备,效果非常好。
此外,远程机器都已正确设置了chef solo。

我在Google上搜索了刀厨师8889,发现:


看起来chef zero正在启动,也许在您的配置文件中尝试使用
chef_zero[:enabled]false将是一件好事?

同意nick的说法,您必须编写一种机制来侦听多个端口,或者根据需要生成端口


您还可以参考tomcat的用例,我们可以为多个构建生成多个tomcat实例,它使用一些机制来实现。了解它很好的用例。

是的,我们也尝试过。但它会产生同样的错误。关于chef_zero,您是对的。但是,我们尝试将chef_zero[:port]更改为4000,错误消息显示为4000。现在,我们正在尝试动态更改此值,以便每个线程使用不同的端口。在运行每个刀子之前,我们在knife.rb文件中更改了chef_zero[:port]。一直到今天早上。从今天早上开始,刀子独奏根本就没有创造任何监听端口。周末发布了一个新版本,这个问题似乎已经解决了。