Сервер Puma, получающий соединение, отказался, поскольку не может подключиться к файлу сокета

Я запускаю проект jruby с сервером puma и nginx. Я запускаю puma с помощью сервиса upstart puma-manager. Все работает нормально, пока файл сокета, который я использую для своей службы, очищен (удален перед попыткой запустить службу). Когда файл сокета не существует, служба создает его, и nginx прекрасно его видит. Однако при остановке/запуске или перезапуске пумы файл сокета остается, и я получаю сообщение об ошибке: IOError: Отказ в соединении при попытке подключения к сокету. Удаление сокета решает проблему.

Проблема в том, что необходимость вручную удалять этот файл сокета раздражает и создает проблемы в производстве.

Я использую конфигурацию puma.rb для запуска с правильно установленными параметрами state_file и pidfile. Я думал, что это правильно обработает эти файлы для меня. Любые предложения или помощь в том, как удалять этот файл сокета каждый раз при перезагрузке сервера?


person Tim C    schedule 14.03.2014    source источник
comment
Я знаю, это может показаться немного странным, но попробуйте изменить chmod файл sock на 777, прежде чем останавливать сервер, и посмотрите, правильно ли он удаляется, просто чтобы убедиться, что это не проблема с разрешениями.   -  person Mohammad AbuShady    schedule 15.03.2014
comment
К сожалению, похоже, это не так. Я думаю, что у puma просто нет хорошего метода для удаления файлов сокетов, когда служба закрывается. Тем не менее, я придумал обходной путь.   -  person Tim C    schedule 15.03.2014


Ответы (1)


После небольшого поиска кажется, что у Puma нет способа очистить свои собственные файлы сокетов при выключении в определенных случаях. Когда у меня будет время, я могу добавить это в проект и отправить им запрос на включение. Тем не менее, я нашел довольно простое решение. В файле конфигурации upstart (они предоставляют puma.conf и puma-manager.conf, но вы можете создать свой собственный) перед строкой, которая запускает команду «bundle exec puma», я добавил проверку, чтобы увидеть, существует ли сокет. Если да, то удаляю. Если нет, я перехожу к пакету exec. Кажется, работает как шарм.

person Tim C    schedule 15.03.2014