Сервер вже запущений. Перевірте… / 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-рейки

або

lsof -wni tcp:3000

вбити процес, використовуючи

kill -9 PID (eg,2786)

1
Незвично - але я думаю, ви маєте на увазі OSX, а не iOS. @SCraig Це робиться в командному рядку.
jmknoll

1
Я видалив файл .pid сервера і все ще мав проблему. Перезапуск моєї системи, хоча і не ідеально, був швидким виправленням.
Matt

Працював як оберіг!
Вільям Хемпшир,

Сер, як я можу запобігти цьому? Це трапляється зі мною дуже часто, мені нудно видаляти server.pid вручну.
Умагон

130

Коротка та чітка однорядкова команда, яка подбає про це.

kill -9 $(lsof -i tcp:3000 -t)

7
ха-ха, можливо, спочатку потрібно закрити вкладку браузера, якщо вона відкрита для localhost: 3000, інакше це може вбити ваш браузер
TMв

хтось намагався зберегти це як псевдонім у zsh, і він не працює?
stackjlei

Іноді мій сервер буде вимкнено, але ruby ​​перевищить CPU. У цьому випадку мені доводиться вбивати 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

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'". Посилання
leymannx

12

Просто:

перейдіть до кореневої папки проекту, коли це станеться, і запустіть:

gem install shutup
shutup

Це знайде процес, який виконується в даний час, уб’є його та очистить файл pid

ПРИМІТКА: якщо ви використовуєте rvm, встановіть gem глобально

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

Відкрийте 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, який відображається в консолі / терміналі.

Дякую.


3

Для отримання додаткової інформації, в контексті запуску програми в docker.

У файлі 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 / тонкий / що завгодно) не вийде чисто, він залишить pid в хост-машині, що спричинить помилку виходу.

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


3

Спочатку знайдіть PID # - там, де застряг сервер Rails

Запустіть це, щоб знайти застряглий PID

cat ./tmp/pids/server.pid

Це поверне щось на зразок 65829

Тоді ВБІЙ ПІД =>kill 65829


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 Це спрацювало для мене.


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 ще раз. Це не пошкодить ваш комп’ютер! Це просто вбиває існуючі рубінові процеси у вашому порту localhost. Новий сервер знову почне ці процеси. Удачі!


0

РІШЕННЯ для Windows:

  1. див. pid з \ tmp \ pids \ server.pid
  2. відкрити cmd як адміністратор -
  3. taskkill / F / PID [pid з кроку 1.]
  4. видалити файл server.pid -
  5. перезапустити сервер - -

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.