Проблем: Всички заявки, направени, докато тънкият се рестартира, водят до 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, но предишният тънък процес все още работи на този порт? Защо би се случило това?