puma start导致“已经有服务器绑定到:<socket>”错误

时间:2015-06-24 05:42:37

标签: ruby-on-rails server puma

我无法可靠地重现这个问题,所以我将描述正在发生的事情,并希望你们中的一个聪明的美洲狮孩子可以帮助我。

我总是在部署过程结束时停止并启动美洲狮。我运行pumactl -F <config_path> stop,然后运行命令puma -q -d -e staging -C <config_path>,有时(并不总是)会导致以下错误:

[12802] Puma starting in cluster mode... 
[12802] * Version 2.11.3 (ruby 2.1.2-p95), codename: Intrepid Squirrel
[12802] * Min threads: 2, max threads: 4
[12802] * Environment: staging
[12802] * Process workers: 2
[12802] * Phased restart available 
[12802] * Listening on unix:///<app_dir>/tmp/puma/sockets/puma.sock 
<ruby_path>/2.1.0/gems/puma-2.11.3/lib/puma/binder.rb:284:in `add_unix_listener': There is already a server bound to: <app_dir>/tmp/puma/sockets/puma.sock (RuntimeError)
<ruby_path>/2.1.0/gems/puma-2.11.3/lib/puma/binder.rb:124:in `block in parse'
<ruby_path>/2.1.0/gems/puma-2.11.3/lib/puma/binder.rb:82:in `each'
<ruby_path>/2.1.0/gems/puma-2.11.3/lib/puma/binder.rb:82:in `parse'
<ruby_path>/2.1.0/gems/puma-2.11.3/lib/puma/cluster.rb:325:in `run'
<ruby_path>/2.1.0/gems/puma-2.11.3/lib/puma/cli.rb:216:in `run'
<ruby_path>/2.1.0/gems/puma-2.11.3/bin/puma:10:in `<top (required)>'
<ruby_path>/2.1.0/bin/puma:23:in `load'
<ruby_path>/2.1.0/bin/puma:23:in `<main>'

如果我之后尝试再次运行相同的puma start命令,它会起作用。

这是我的puma配置:

#!/usr/bin/env puma

directory "<app_dir>/current"
rackup "<app_dir>/current/config.ru"
environment "staging"

pidfile "<app_dir>/tmp/puma/pid"
state_path "<app_dir>/tmp/puma/state"
activate_control_app "<app_dir>/tmp/puma/sockets/pumactl.sock"

stdout_redirect "<app_dir>/shared/log/puma.error.log", "<app_dir>/shared/log/puma.access.log", true

threads 2,4

bind "unix:///<app_dir>/tmp/puma/sockets/puma.sock"

workers 2

我的问题:

  1. 如何重现此错误?
  2. 我该如何解决?这是puma或我配置的问题吗?

1 个答案:

答案 0 :(得分:1)

而不是同时运行这两个命令......

pumactl -F <config_path> stop
puma -q -d -e <env> -C <config_path>

只需使用restart命令:

pumactl -F <config_path> restart

说明

puma README有一个关于Restarting的部分,其中没有提到一个接一个地调用stop和start命令。由于该用例不受支持,使用已建立的方法restart美洲狮服务器很可能会解决此问题。

注意

我无法始终如一地重现此美洲狮错误,因此我无法100%确认使用pumactl restart修复此问题。 (即使puma缺少对pumactl stop的支持,后跟puma意味着它确实存在。)如果有人在使用支持的pumactl restart时仍然遇到此问题,请告诉我,以便我可以修改这个答案。