Атомное развертывание: после перезагрузки Nginx PHP-FPM все еще указывает на старый webroot

Я пытаюсь сделать атомное развертывание с Nginx и PHP5.5-FPM с Opcache.

Идея состоит в том, чтобы просто изменить webroot в nginx.conf, а затем просто запустить

перезагрузка nginx

Я ожидаю, что Nginx будет ждать завершения текущих запросов, а затем перезагружает себя, передавая новый путь webroot в PHP FPM, но это не работает: PHP FPM по-прежнему загружает файлы PHP из старого каталога.
Я использую (недокументированный) $ realpath_root в Ngnix, чтобы получить не символическую ссылку (/ prod / current), а реальный путь.
Техника документирована здесь: http://codeascraft.com/2013/07/01/atomic-deploys-at-etsy/
Отладка Nginx Я ясно вижу, что он проходит новый (реальный) путь.

    2014/09/23 17:13:22 [debug] 26234#0: *1742 http script var: "/www/htdocs/current/web"2014/09/23 17:13:22 [debug] 26234#0: *1742 posix_memalign: 00000000010517A0:4096 @16
2014/09/23 17:13:22 [debug] 26234#0: *1742 http script copy: "SCRIPT_FILENAME"2014/09/23 17:13:22 [debug] 26234#0: *1742 http script var: "/www/htdocs/prod/releases/20140923124417/web"2014/09/23 17:13:22 [debug] 26234#0: *1742 http script var: "/index.php"2014/09/23 17:13:22 [debug] 26234#0: *1742 fastcgi param: "SCRIPT_FILENAME: /www/htdocs/prod/releases/20140923124417/web/app.php"2014/09/23 17:13:22 [debug] 26234#0: *1742 http script copy: "DOCUMENT_ROOT"2014/09/23 17:13:22 [debug] 26234#0: *1742 http script var: "/www/htdocs/prod/releases/20140923124417/web"2014/09/23 17:13:22 [debug] 26234#0: *1742 fastcgi param: "DOCUMENT_ROOT: /www/htdocs/prod/releases/20140923124417/web"2014/09/23 17:13:22 [debug] 26234#0: *1742 http script copy: "APPLICATION_ENV"

Чтобы заставить это работать, я должен запустить

перезагрузка php-fpm

но я теряю некоторые запросы.

‘recv () не удалось (104: сброс соединения по одноранговому узлу) при чтении заголовка ответа из восходящего потока «

Это файл nginx, который я использую:

server {
listen              26023;

server_name         prod.example.com;

client_max_body_size  20m;
client_header_timeout 1200;
client_body_timeout   1200;
send_timeout          1200;
keepalive_timeout     1200;access_log  /var/logs/prod/nginx/prod.access.log main;
error_log   /var/logs/prod/nginx/prod.error.log;

set $root_location /var/www/htdocs/prod/current/web;
root $root_location;

try_files   $uri $uri/ /index.php?$args;
index       index.php;location ~ \.php$ {
fastcgi_pass    unix:/var/run/php5-fpm/prod.sock;
fastcgi_index   index.php;

include         fastcgi_params;

fastcgi_connect_timeout 1200;
fastcgi_send_timeout    1200;
fastcgi_read_timeout    1200;
fastcgi_ignore_client_abort on;

fastcgi_param   SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param   DOCUMENT_ROOT   $realpath_root;

fastcgi_param   APPLICATION_ENV live;
fastcgi_param   HTTPS           $thttps;
}

}

это пул конф

:~$ curl http://127.0.0.1/fpm_status_prod
pool:                 prod
process manager:      dynamic
start time:           23/Sep/2014:22:42:34 +0400
start since:          1672
accepted conn:        446
listen queue:         0
max listen queue:     0
listen queue len:     0
idle processes:       49
active processes:     1
total processes:      50
max active processes: 2
max children reached: 0
slow requests:        0

Любое предложение?

0

Решение

Я исправил проблему, я также использовал APC для загрузчика классов, и он не был очищен.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]