2012-11-11 3 views
0

문제점 : thin 명령이 재시작되는 동안 요청 된 모든 요청은 502 잘못된 게이트웨이 오류가됩니다.레일 코드 배포 후 가상 시스템 재시작 실행, 상수 502 불량 게이트웨이 오류

코드 변경 사항을 서버에 배포 할 때 새로운 변경 사항을 적용하려면 씬을 다시 시작해야합니다. 내 얇은 구성 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 잘못된 게이트웨이 오류 또는 504 게이트웨이 시간 초과가 발생합니다. 새 코드를 프로덕션 환경으로 푸시 한 후 내 요청이 올바르게 처리되도록하려면 어떻게해야합니까? 무엇 일어나는 것은 얇은하려고하고있는 것을

/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

으로 다시 시작 해요 그것은 나타납니다

감사

UPDATE

얇은 로그는이 오류를 보여 포트 3000에서 수신 대기하지만, 이전의 씬 프로 세 스는 여전히 해당 포트에서 실행 중입니까? 왜 이런 일이 일어 났을까요?

+0

씬 (예 : nginx) 앞에서 웹 서버를 사용하고 있습니까? –

+0

네, 저는 nginx를 사용하고 있습니다. 무슨 일이 일어나고있는 것 같아요 얇은 다시 시작하는 동안 펑키 한 일이 일어나고 있기 때문에 nginx는 얇게 말할 수 없습니다. –

답변

1

Thin이 중지되면 Nginx와 통신하는 동안 소켓 파일을 삭제 한 다음 성공적인 시작시이를 다시 만듭니다. Thin이 중지 된 상태에서도 NGinx는 여전히 웹 요청을 듣고 있습니다. 그 시점에서 Nginx에 요청하면, 언급 한 것처럼 오류가 발생할 것입니다. Thin이 제대로 시작하지 못했거나 케이스의 소켓에 바인딩 할 수 없다는 것을 의미합니다. 너무 빨리 멈추고 시작하려고합니다.

과 같은 뚜껑 작업은 일해야합니다.

task :restart do 
    sudo "bundle exec thin restart -C thin.yml" 
end 

onebyone을 제거해도 여전히 문제가 있습니까?

또한 얇고 카피 스트라 노에 롤링 다시 시작 구현에 매우 유용이 문서 발견 -. 그것은 다시 시작 내장 압연을하고있다 개인적으로 http://pointatstar.wordpress.com/2011/01/17/rolling-restart-for-thin-cluster-via-capistrano/

, 나는 유니콘을 사용하고 그것을가 RailsCast에 덮여 있었다 - http://railscasts.com/episodes/373-zero-downtime-deployment

+0

예, 여전히 oneoneby를 제거하면 문제가 발생합니다. 나는 지금 Capistrano를 사용하지 않고 있으며 단순화를 위해 설정에 추가로 보석을 추가하지 않아도되기를 바라고 있습니다. 흥미로운 유니콘 사운드 - 얇은 보충 물이나 얇은 보충 물이 될까요? –

+0

Thin. 오래 전에 유니콘을 위해 씬을 떠났습니다. 가장 큰 특징은 여러 프로세스를 생성하도록 Unicorn에 요청할 수 있으며이를 관리/유지 관리한다는 것입니다. Thin에서는 God, Monit 등을 통해 각 씬 프로세스를 관리해야합니다. 요즘에는 NGinx + Unicorn이 기본 선택입니다. –

+0

디버깅을 위해서, stop과 start 사이에 5 초의 sleep을 놓고 봐라. 나는 그것의 완전히 멈추기 전에 시작하려고 노력하고있는 we''re를 추측하고있다. 나는 이것을 전에 보았고, 다른 방법으로 시작/멈춤으로써 그것을 고쳤다. 질문에 그 세부 사항을 추가 할 수 있습니까? –

관련 문제