2012-07-25 80 views
4

我有我的瘦服務器配置nginx和我的ROR應用程序正在他們上運行。如何正常重新啓動thin + nginx?

運行thin restart當我發佈更新時,我的代碼引入了一些停機時間給我的應用程序。我試圖找出如何正常重啓正在運行的Thin實例,但我無法找到一個好的解決方案。

有沒有人能夠做到這一點?

+1

「優雅」是什麼意思?如果您需要重新啓動,則需要重新啓動。 – Phrogz 2012-07-25 21:22:07

+3

「優雅」意味着它不會丟棄當前連接,直到它們被處理。 – 2013-03-22 03:54:01

+0

這就是獨角獸是如何做到的: 1-分叉主和工作進程。 2-將所有新請求發送給新主人。 3-完成後向所有舊進程發送一個kill信號。 這是優美的。 – Abdo 2014-12-07 23:17:27

回答

7
# Restart just the thin server described by that config 
sudo thin -C /etc/thin/mysite.yml restart 

Nginx將繼續運行和代理請求。如果您的Nginx設置爲使用多個上游服務器,例如

server { 
    listen  80; 
    server_name myapp.mysite.com; 
    # ... 
    location/{ 
    try_files $uri $uri/index.html /cache$uri.html $uri.html @proxy; 
    } 
    location @proxy { 
    proxy_pass http://myapp.rails; 
    } 
} 

upstream myapp.rails { 
    server 127.0.0.1:9001 max_fails=1 fail_timeout=10s; 
    server 127.0.0.1:9002 max_fails=1 fail_timeout=10s; 
    server 127.0.0.1:9003 max_fails=1 fail_timeout=10s; 
} 

…然後每個實例將依次重新啓動,Nginx的意志的代理人之一左右自動路由請求,如果它下來。