Сервер уже запущен. Проверьте… / tmp / pids / server.pid. Выход - рельсы

80
..$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
A server is already running. Check /home/..name/rprojects/railsapp/tmp/pids/server.pid.
Exiting

как проще всего решить эту проблему для новичка в рельсах?

Бен
источник
Удаление tempпапки может решить вашу проблему.
шах

Ответы:

168

Вы можете удалить server.pidфайл.

rm /your_project_path/tmp/pids/server.pid

Остальное:

попробуйте в OSX:

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

или в Linux:

ps -aef | grep rails

или же

lsof -wni tcp:3000

убить процесс, используя

kill -9 PID (eg,2786)
Бен
источник
1
Придирка - но я думаю, вы имеете в виду OSX, а не iOS. @SCraig Это делается в командной строке.
jmknoll
1
Я удалил файл .pid сервера, но проблема не исчезла. Перезапуск моей системы, хотя и не идеальный, был быстрым решением.
Мэтт
Работал как шарм!
Уильям Хэмпшир
Сэр, как я могу предотвратить это? Со мной такое случается очень часто, мне надоело вручную удалять server.pid.
Umagon
130

Короткая и четкая однострочная команда, которая позаботится об этом.

kill -9 $(lsof -i tcp:3000 -t)
Каран Пурохит
источник
7
lol, возможно, сначала захочется закрыть вкладку браузера, если она открыта для localhost: 3000, иначе это может убить ваш браузер
TMin
кто-нибудь пробовал сохранить это как псевдоним в zsh, и он не работает?
stackjlei
Иногда мой сервер отключается, но Ruby полностью загружает процессор. В этом случае я должен убить ruby, запустив topполучение PID, а затем запустивkill -9 <PID>
daveomcd
17

server.pid содержит только идентификатор процесса работающего сервера.

Если вы это сделаете:

more /your_project_path/tmp/pids/server.pid

вы получите номер (например, 6745), который можно использовать для остановки предыдущего сервера с помощью команды kill:

kill -9 6745

а затем вы можете удалить файл с помощью rmкоманды

rm /your_project_path/tmp/pids/server.pid
Muichkine
источник
1
Заключение server.pidв кавычки заставит оболочку попытаться выполнить server.pid, не так ли?
mwfearnley
14

Если вы используете docker-compose и docker-compose.yml: volumes: - .:/myapp Это означает, что ваша локальная рабочая область сопоставлена ​​с папкой контейнера / myapp.

Все, что находится в / myapp, не будет удалено для определенных томов.

Вы можете удалить ./tmp/pids/server.pidна своем локальном компьютере. Тогда у контейнера / myapp не будет этого файла.

полоса дороги
источник
4
Кроме того, можно просто удалить этот файл автоматически при каждом запуске контейнера: command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'".
Ссылки
12

Просто:

зайдите в корневую папку проекта, когда это произойдет, и запустите:

gem install shutup
shutup

Это обнаружит запущенный в данный момент процесс, убьет его и очистит файл pid.

ПРИМЕЧАНИЕ: если вы используете rvm, установите гем глобально

rvm @global do gem install shutup
Лоренцо Синиси
источник
5

Решить проблему можно с помощью:

kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)
Вебстер
источник
5

Иногда это происходит из-за того, что вы выключаете сервер принудительно, например, выключаете ОС / машину вручную, чтобы у сервера не было достаточно времени для входа в server.pid.

Один из простых способов - вручную перейти в tmp/pids/(каталог, отображаемый на консоли) и удалить server.pidфайл. Затем, когда вы снова запускаете сервер, rails serverили rails sон создает новый server.pid, и вы можете продолжить разработку.

Дракон рыцарь
источник
3

графический интерфейс для пользователя Windows

откройте ResourceMonitor (диспетчер задач -> Производительность -> ResourceMonitor) и завершите процесс ruby.exe

введите описание изображения здесь

Александр Сидиков Пфайф
источник
3

Откройте path/to/your/rails/project/tmp/pids/server.pidфайл.

Скопируйте найденный там номер.

Бежать kill -9 [PID]

Где [PID]номер, который вы скопировали из server.pidфайла.

Это убьет запущенный серверный процесс, и вы сможете снова запустить сервер без каких-либо проблем.

Даниэль Оквуфулезе
источник
3

Убейте server.pid с помощью команды:

kill -9 `cat /root/myapp/tmp/pids/server.pid`

Примечание. Используйте свой путь server.pid, который отображается в консоли / терминале.

Спасибо.

Рахул2692
источник
3

Для получения дополнительной информации в контексте запуска приложения в докере.

В файле docker-compose.yml, в самом контейнере приложения, вы можете использовать одно из следующих действий:

command: ["rm /your-app-path/tmp/pids/server.pid && bundle exec bin/rails s -p 3000 -b '0.0.0.0'"]

или же

command: ["rm /your-app-path/tmp/pids/server.pid; foreman start"]

Обратите внимание на использование либо, ;либо &&, которое &&отправит сигнал выхода, если rmне удастся найти файл, заставляя ваш контейнер преждевременно останавливаться. Использование ;продолжит выполнение.

Почему это в первую очередь вызвано? Обоснование состоит в том, что если сервер (puma / thin / любой другой) не завершает работу, он оставит pid на хост-машине, что приведет к ошибке выхода.

Для переносимости, а не для ручного удаления файла в хост-системе, лучше проверить, существует ли файл в рамках сценария, или составить сам файл.

Джимми М.Г. Лим
источник
3

First Find PID # - где застрял сервер Rails

Запустите это, чтобы найти застрявший PID

cat ./tmp/pids/server.pid

Он вернет что-то вроде 65829

Затем УБИЙТЕ этот PID =>kill 65829

jso1919
источник
2

Запустите эту команду -

lsof -wni tcp:3000

тогда вы получите следующую таблицу -

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    2552 shyam   17u  IPv4  44599      0t0  TCP 127.0.0.1:3000 (LISTEN)
ruby    2552 shyam   18u  IPv6  44600      0t0  TCP [::1]:3000 (LISTEN)

Запустите эту команду и замените PID из приведенной выше таблицы

kill -9 PID

пример:

kill -9 2552

Праднеш патил
источник
0

Для этой проблемы

Что я сделал:

  • Удалите папку Pids, расположенную под app/tmp/
  • а затем закройте терминал, на котором запущено текущее приложение, и закройте вкладку (в окне браузера)

  • после этого снова откройте терминал, войдя в папку, а затем сделайте, rails s

  • Затем открывается новая вкладка, на которой запущено наше приложение.
совмя
источник
0

сначала скопируйте камер внутри файла, затем удалите его: rm /your_project_path/tmp/pids/server.pid, затем создайте его снова. touch /YOUR_PROJECT_PATH/tmp/pids/server.pid У меня это сработало.

Mounaim
источник
0

Запустите приведенную ниже команду на терминале (только для Linux)

ps aux | grep rails

а потом

kill -9 [pid]

По-другому

lsof -wni tcp:3000

а потом

kill -9 [PID]
Арвинд Сингх
источник
0

РЕШЕНИЕ

Адрес уже используется - ошибка bind (2) ”500 в Ruby on Rails

Недавно я попытался запустить приложение Rails на производственном сервере. Это не только не сработало, но и сломало мой сервер разработки localhost: 3000. Localhost загрузит только пустую белую страницу или ошибку 500.

Чтобы решить эту проблему, я использовал две быстрые команды. Если они не вернут результат, возможно, вам придется поискать решение в другом месте, но это хорошее быстрое решение.

lsof -wni tcp: 3000

ruby 52179 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (СЛУШАТЬ)
ruby 52179 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (СЛУШАТЬ)
ruby 52180 rachelchervin 50u IPv6 0x ... 7aa3 0t0 TCP [:: 1]: hbci (СЛУШАТЬ)
ruby 52180 rachelchervin 51u IPv4 0x ... c7bb 0t0 TCP 127.0.0.1:hbci (СЛУШАТЬ)

Эта команда показывает все мои текущие запущенные процессы и их PID (идентификаторы процессов) на порту 3000. Поскольку существуют существующие запущенные процессы, которые не закрылись правильно, мой новый сервер: 3000 не может запуститься, отсюда и ошибка 500.

убить 52179

убить 52180

рельсы s

Я использовал команду Linux kill, чтобы вручную остановить вредоносные процессы. Если у вас их больше 4, просто используйте kill для любых PID, пока первая команда не станет пустой. Затем попробуйте снова перезапустить сервер localhost: 3000. Это не повредит вашему компьютеру! Он просто убивает существующие процессы Ruby на вашем порту localhost. Новый сервер снова запустит эти процессы. Удачи!

Томас
источник
0

РЕШЕНИЕ для Windows:

  1. см. pid из \ tmp \ pids \ server.pid
  2. открыть cmd как администратор
  3. taskkill / F / PID [pid из шага 1.]
  4. удалить файл server.pid
  5. перезапустить сервер
Танай Бурреджа
источник
0

Для ubuntu 20, kill -9 $(ps -aef | grep rails)

Риддхи
источник