Проблема: все запросы, сделанные во время перезапуска Thin, приводят к ошибке 502 Bad Gateway Errors.
Когда я развертываю изменения кода на своем сервере, мне приходится перезапускать тонкий сервер, чтобы новые изменения вступили в силу. Моя тонкая конфигурация yml выглядит так:
chdir: /var/www/appname
servers: 6
environment: production
onebyone: true
wait: 30
no-epoll: true
address: 0.0.0.0
port: 3000
timeout: 30
log: log/thin.log
pid: tmp/pids/thin.pid
max_conns: 1024
max_persistent_conns: 512
require: []
daemonize: true
Насколько я понимаю, свойство «onebyone» гарантирует, что по крайней мере 1 сервер всегда доступен для ответа на запросы. Однако происходит то, что любые запросы, сделанные до завершения перезапуска всех серверов, приведут к ошибкам 502 Bad Gateway или 504 Gateway Time-out. Как я могу гарантировать, что мои запросы всегда обрабатываются должным образом после того, как я отправлю новый код в производство?
ОБНОВЛЕНИЕ
тонкие журналы показывают эту ошибку:
/usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_tcp_server': no acceptor (RuntimeError)
from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_server'
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/backends/tcp_server.rb:16:in `connect'
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/backends/base.rb:53:in `block in start'
from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `call'
from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'
from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/backends/base.rb:61:in `start'
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/server.rb:159:in `start'
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/controllers/controller.rb:86:in `start'
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/runner.rb:185:in `run_command'
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.3.1/lib/thin/runner.rb:151:in `run!'
from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.3.1/bin/thin:6:in `<top (required)>'
from /usr/local/bin/thin:19:in `load'
from /usr/local/bin/thin:19:in `<main>'
Я перезапускаю с sudo thin -C /etc/thin/appname.yaml restart
Похоже, что тонкий пытается прослушивать порт 3000, но предыдущий тонкий процесс все еще работает на этом порту? Почему это произошло?