Перезапуск Unicorn с USR2 не приводит к перезагрузке настроек production.rb
-
28-10-2019 - |
Вопрос
Я использую единорог и пытаюсь добиться нулевого простоя при перезапуске.
Пока все это круто, главный процесс разветвляется и запускает 4 новых рабочих, затем убивает старого, все довольны.
Наши скрипты отправляют следующую команду для перезапуска единорога:
родовое слово На первый взгляд все выглядит отлично, но оказывается, что unicorn не перезагружает production.rb.(Каждый раз при развертывании мы меняем значение config.action_controller.asset_host
на новую конечную точку контейнера CDN с нашими предварительно скомпилированными ресурсами в ней).
После перезапуска единорога таким образом хост ресурсов все еще указывает на старую версию.Выполнение реального перезапуска (то есть: остановка главного процесса, а затем запуск единорога снова с нуля) приводит к новым изменениям конфигурации.
Для параметра preload_app
установлено значение true
в нашем файле конфигурации единорога.
Есть мысли?
Решение
Я предполагаю, что ваши единороги перезапускаются в старом производственном каталоге, а не в новом производственном каталоге - другими словами, если ваш рабочий каталог в unicorn.rb - <capistrano_directory>/current
, вам нужно убедиться, что символическая ссылка происходит до того, как выпопытаться перезапустить единорогов.
Это объясняет, почему их остановка и запуск вручную работают: вы, вероятно, делаете это после развертывания, что заставляет их запускаться в правильном каталоге.
Когда в процессе развертывания вы перезапускаете единорогов?Вы должны убедиться, что сигнал USR2 отправляется после того, как новый каталог выпуска символьно связан с текущим.
Если это не помогает, укажите файлы unicorn.rb и deploy.rb;это значительно упростит отладку этой проблемы.
Другие советы
Помните, что: ваш рабочий каталог в unicorn.rb должен быть: / ваш / cap / directory / current
НЕ : File.expand_path ("../ ..", ФАЙЛ )
Из-за ошибки разветвления программных ссылок unicorn и linux: программные ссылки не работают должным образом.
например:
cd current #current - это мягкая ссылка на другой каталог
... ...
когда мы получаем наш рабочий каталог, мы получаем абсолютный путь, а не путь в "текущем"