我无法可靠地重现这个问题,所以我将描述正在发生的事情,并希望你们中的一个聪明的美洲狮孩子可以帮助我。
我总是在部署过程结束时停止并启动美洲狮。我运行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
我的问题:
答案 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
时仍然遇到此问题,请告诉我,以便我可以修改这个答案。