Сервер вже працює в Rails


137

Коли я запускаю сервер рейлів за допомогою rails sкоманди, це відображаєтьсяA server is already running. Check C:/Sites/folder/Pids/Server.pids

Коли я відкриваю файл, він видає чотиризначний номер, тож як я можу вирішити цю проблему?

FYI

  1. Наразі жоден інший примірник cmd Rails не працює.
  2. Перевірений менеджер завдань, але лише cmd.exeпоказує, що не працює інший процес. (за допомогою Windows).

1
Я вилучаю server.pid з \ tmp \ pids
user6746262

Відповіді:


195

Видаліть файл: C: /Sites/folder/Pids/Server.pids

Пояснення У землі UNIX принаймні ми зазвичай відстежуємо ідентифікатор процесу (pid) у файлі типу server.pid. Я думаю, що тут робиться те саме. Цей файл, ймовірно, залишився після збою.


5
що саме цей файл і робить для цього ..може ви поясніть це трохи більше :)
swapnesh

11
Вибачте, я повинен був прокоментувати далі. Принаймні, на землі UNIX ми зазвичай відстежуємо ідентифікатор процесу (pid) у файлі, на зразок server.pid. Я думаю, що тут робиться те саме. Цей файл, ймовірно, залишився після збою.
rainkinz

Я думаю, що я клоную це від Git, так чи ти вважаєш, що це може бути причиною? github.com/swapnesh/Add_twitter_bootstrap
swapnesh

1
Після цього я все ще отримую "Порт у використанні" за 3000. Хтось знає, як я можу це виправити? Дякую!
daveomcd

5
Запустіть netstat -a -oкомандний рядок, щоб побачити, який процес використовує порт 3000
Rory

172

TL; DR Просто запустіть цю команду, щоб її вбити

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

Основна причина: Оскільки PID заблокований у файлі, а веб-сервер вважає, що якщо цей файл існує, то це означає, що він вже працює. Зазвичай, коли веб-сервер закритий, цей файл видаляється, але в деяких випадках належного видалення не відбувається, тому вам доведеться видаляти файл вручну. Нові рішення

при запуску рейок s

=> Завантаження WEBrick

=> Rails 4.0.4 додаток, починаючи з розробки на http://0.0.0.0:3000

=> Запуск rails server -hдля отримання додаткових параметрів запуску

=> Ctrl-C для відключення сервера

Сервер вже працює. Перевірте /your_project_path/tmp/pids/server.pid. Вихід

Тому розмістіть свій шлях, показаний тут, /your_project_path/tmp/pids/server.pid

та видаліть цей файл server.pid :

rm /your_project_path/tmp/pids/server.pid

АБО У випадку, коли ваш сервер був відокремлений, дотримуйтесь інструкцій нижче:

Якщо ви від'єднали сервер рейлів за допомогою команди "rails -d",

Видаліть відокремлений сервер рейки за допомогою команди

ps -aef | grep rails

АБО за цією командою

sudo lsof -wni tcp:3000

тоді

kill -9 pID

АБО використовуйте цю команду

Щоб знайти та вбити процес за назвою порту, на якому працює ця програма. За 3000 замінних портів, на яких працює ваша програма.

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

Старе рішення:

rails s -p 4000 -P tmp/pids/server2.pid

Крім того, ви можете знайти цю публікацію, щоб отримати додаткові параметри Оновлення Rails до 3.2.11 перерв на декількох серверах


оскільки PID заблокований у файлі, а веб-сервер вважає, що якщо такий файл існує, це означає, що він вже працює. Зазвичай при закритому веб-сервері файл видаляється, але в деяких випадках належного видалення не відбувається, тому вам доведеться видаляти файл вручну
Taimoor Changaiz

Обережно це також вб’є ваш браузер, якщо він вказує на: 3000!
Аерамор

1
ідеальне рішення дляsudo kill -9 $(lsof -i :3000 -t)
new2cpp

84
lsof -wni tcp:3000

Тоді вам слід побачити процес рубіну і ви можете запустити

kill -9 processid

вам слід добре запустити процес зараз

rails s thin

Запуск декількох процесів не здається гарною ідеєю, і з того, що я прочитав, багато людей погоджуються. На жаль, я помітив багато витоків пам’яті з рейками, тому я не міг уявити собі два процеси. Я знаю, що за один понаднормовий час оновлення моєї сторінки стає все повільнішим через збереження даних у пам'яті.


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

2
@CalamityAdam Rails зазвичай працює на порту 3000. Він шукає процеси, засновані на цьому, і отримує від них лише PID ( -tопція), а потім вбиває процес цим отриманим PID.
totymedli

13

Ви можете позбутися процесу, вбивши його:

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

Мені це подобається. Приємно і стисло, але все ж повно. Ура.
LunaCodeGirl


4

Це трапляється, коли ви вбиваєте серверний процес, а файл pid не оновлювався. Найкраще рішення - видалити файл Server.pid .

Використовуйте команду

rm <path to file Server.pid>


4

gem install shutup

потім перейдіть у поточну папку проекту рейлів та запустіть

shutup # це знищить поточний процес Rails

Ви можете використовувати команду "закриття" кожен раз, коли захочете

СЛУЧАЙНИК: Я творець цієї самоцвіти

ПРИМІТКА. Якщо ви використовуєте rvm, встановіть дорогоцінний камінь у всьому світі

rvm @global do gem install shutup

3

Можливо , ви призупините сервер по: ^Z.

Чотири цифрові цифри, які vim C:/Sites/folder/Pids/Server.pidsвидаються, - це ідентифікатор процесу.

Потрібно kill -9 processid, замінивши ідентифікатор процесу на 4 числа, які вимкнув vim (або інший редактор).


Який правильний спосіб зупинити сервер належним чином? CTRL + C?
stt106

1

Якщо ви перебуваєте в ОС Windows, вам потрібно зробити лише один крок, коли «перезавантажиться рейки», а потім знову ввести «rails s» .


1

У Windows Rails 5.2 видаліть цей файл

c:/Sites/<your_folder>/tmp/pids/server.pid

і біжи

rails s

знову.


1

Виконати: fuser -k -n tcp 3000

Це знищить процес, що працює на порту 3000 за замовчуванням.


0

У мене просто була ця проблема і спробували встановити її на інший порт, але єдине, що мені потрібно було зробити, - це видалити мій [app_directory]/tmp/pids/server.pidі все було добре.


0

Виконати:

в Ubuntu / linux

 sudo rm /var/www/html/rails/WBPOCTEST/tmp/pids/server.pid

Або

 pkill -9 ruby

або

lsof -wni tcp:3000

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