Іноді буває так, що тека tmp/pids губиться на локальній машині. Вона знаходиться з зрозумілих причин у gitignore. Як результат, сервер не може стартанути і показує помилку:
* Listening on http://0.0.0.0:3000bundler: failed to load command: puma (/Users/memecode/.rbenv/versions/3.3.5/bin/puma)/Users/memecode/.rbenv/versions/3.3.5/lib/ruby/gems/3.3.0/gems/puma-6.5.0/lib/puma/launcher.rb:316:in `write': No such file or directory @ rb_sysopen - tmp/pids/server.pid (Errno::ENOENT)
Текст помилики доволі буквальний:
No such file or directory @ rb_sysopen - tmp/pids/server.pid
Фіскимо помилку
Нам треба створити теку tmp/pids самостійно. Для цього можна з терміналу запустити:
mkdir -p tmp/pids
Перезапускаємо сервер, і він має успішно стартанути створивши файл
server.pid.
Cуто з цікавості можна перевірити:
ls tmp/pids
Має показати файл:
server.pid
Для чого потрібен server.pid?
Файл
server.pid використовується сервером Rails для зберігання ідентифікатора процесу (PID) активного серверного процесу. Цей PID допомагає системі відстежувати, який саме процес відповідає за сервер. Перед запуском нового сервера Rails перевіряє наявність цього файлу. Якщо файл є, а процес, на який він вказує, досі активний, Rails не дозволяє запустити новий сервер, щоб уникнути конфліктів.
Тобто саме цей відповідає за те, щоб ви випадково не запустили другий сервер за допомогою rails s в сусідній табі терміналу.
Крім того, файл допомагає правильно завершити роботу сервера. Коли сервер зупиняється, файл server.pid автоматично видаляється, сигналізуючи, що сервер більше не працює і його можна перезапустити без проблем. Якщо ж файл відсутній, Rails створює його при старті. У випадку, якщо файл існує, але процес, на який він посилається, вже неактивний, це може викликати помилку, і тоді файл потрібно видалити вручну перед повторним запуском сервера.