Не вдається зупинити сервер рейлів


126

Я новачок у рейках, і я використовую машину ubuntu та rubymine IDE. Проблема полягає в тому, що я не в змозі зупинити сервер рейки. Я намагався зупинити сервер, вбивши процес рейки. Але, коли я бігаю pgrep -l rails, такого процесу не знайти. Отже, я в змозі вбити лише рубінові процеси, але сервер не зупиниться.

Я спробував ./script/server stop(оскільки я почав це бігом ./script/server start), але це не вийшло. Погугливши і знайшовши кілька публікацій про stackoverflow, я спробував змінити порт прослуховування порту localhost, але без успіху. Може хтось допоможе?


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

@Newben ви хочете вбити весь процес?
Учень

@ Шрі, так, я хочу вбити весь процес
epsilones

1
@Newben Перевірте мою оновлену відповідь нижче і спробуйте, і дайте мені знати
Учень

Відповіді:


303

Ви можете використовувати інші порти, такі як:

rails server -p 3001

Зазвичай у своєму терміналі ви можете спробувати Ctrl + Cвідключити сервер.

Інший спосіб вбити сервер за замовчуванням Ruby on Rails (який є WEBrick):

kill -INT $(cat tmp/pids/server.pid)

У своєму терміналі, щоб дізнатися PID процесу:

$ lsof -wni tcp:3000

Потім використовуйте число в стовпці PID, щоб знищити процес:

Наприклад:

$ kill -9 PID

І деякі інші відповіді, які я знайшов:

Щоб зупинити сервер рейки під час роботи, натисніть:

CTRL-C
CTRL-Z

Ви отримаєте контроль до bash. Потім введіть (без $):

$ fg

І це повернеться в процес, а потім Rails sналежним чином вийде з ладу .

Це трохи дратує, але це впевнено перемагає вбивати процес вручну. Це не дуже погано, і це найкраще, що я міг зрозуміти.

Оновлена ​​відповідь:

Ви можете використовувати, killall -9 railsщоб знищити всі запущені програми з railsіменем "".

killall -9 rails


Вибачте, lsof -wni tcp: 3000 нічого не повертає, а у мене немає жодного tmp / pids / folder
epsilones

Якщо Вебрік працює, то його PID знаходиться у {APP_ROOT}/tmp/pids/server.pidфайлі, тому вам не доведеться його шукати - поки працює сервер. Отже, якщо замість того, щоб ctrl-cви просто запустили цю команду kill в іншому терміналі, вона вбиє сервер Webrick негайно.
Учень

Коли я запускаю рейки killall -9, я отримую повідомлення про те, що "такого процесу не знайдено" ??
epsilones

Btw, папка {APP_ROOT} / tmp / pids / дійсно існує, але вона порожня
epsilones

1
Жодна з цих команд для мене нічого не робила. Однак перезавантаження машини вирішило проблему.
Герб Механ

51

ви можете використовувати команду grep наступним чином,

ps aux | grep rails

і потім

kill -9 {process_id} 

насправді цей комнад ловить лише "0:00 grep --color = auto rails", що, мабуть, є
грепом

Завдяки цьому рішенню, що працює для сервера, який все ще працює, навіть термінальна сила закрита. Ніцца
ksugiarto

А що, якщо у мене багато процесів, і я не хочу вбивати їх вручну один за одним?
Микола Кондратенко

Вбити їх усіх можнаkillall -9 rails
maximus ツ

знайти сервер, який мені довелося зробитиps aux | grep puma
Самі Бірнбаум

27

pkill -9 rails вбити весь процес рейок

Оновлена ​​відповідь

ps aux|grep 'rails'|grep -v 'grep'|awk '{ print $2 }'|xargs kill -9

Це знищить будь-який процес запущених рейок. Замініть "рейки" чимось іншим, щоб убити будь-які інші процеси.


18

Нижче наведено етапи вбивства серверного процесу:

1. lsof -i tcp:3000

2. kill -9 1234

де 1234PID процесу: localhost: 3000 відображення на кроці 1.

АБО

Видаліть файл (server.pid) під Rails.root/tmp/pids/та перезавантажте сервер.

АБО

відкрити додаток в іншому порту за допомогою команди:

rails s -p 3001


15

На моєму MAC killall -9 railsце не працює. Але killall -9 rubyробить.


Те саме. В цьому і COMMANDзначення.
IIllIIll

10

Я зазвичай використовую:

killall ruby

АБО

pkill -9 ruby

який вбиває всі процеси , пов'язані з рубіновими, які працюють як rails server, rails consoleі т.д.


Якщо ви не знаєте pkill -9 або kill -9, можливо, варто також помітити, що це може вбити й інші рубінові процеси, наприклад, ID rubymine IDE.
Kjell

4

1. Просто видаліть pid-файл із каталогу додатків rails

Rails_app -> tmp -> pids -> pid file

Видаліть файл і запустіть

rails start


2. Для Rails 5.0 і вище можна використовувати цю команду

rails restart


3

Використовуйте ctrl+cдля вимкнення сервера Webrick.

На жаль, якщо його не працює, тоді примусово закрийте термінал і перезавантажте його.

Ще одна хитрість полягає в тому

1. open your system-monitor(a gui application) on ubuntu

2. Select processes tab 

3. Then look for a process having name 'ruby'

4. End that process

навіть u перезапуск іноді сервер працює. Тому що нам потрібно вбити temp / pid, щоб зупинити сервер
Learner

Але зазвичай припинення терміналу зупиняє процес bcoz, його передній план і працює на терміналі.
Gopal S Rathore

3

Видаліть server.pid з папки tmp / pids. У моєму випадку помилка була: Сервер вже запущений. Перевірте /home/sbhatta/myapp/tmp/pids/server.pid.

Отже, я видаляю server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid потім біжи rails s


3

Крок 1. Знайдіть, які предмети споживають 3000 порт.

lsof -i:3000

крок 2: Знайдіть названий процес

Для Mac

ruby      TCP localhost:hbci (LISTEN)

Для Ubuntu

ruby      TCP *:3000 (LISTEN)

Крок 3: Знайдіть PID процесу та вбийте його.

kill -9 PID


2

Я використовував, killall -9 railsяк Шрі запропонував, і це не спрацювало. Я скоригував команду на killall -9 rubyта сервер негайно закрився.

Tl; dr: killall -9 ruby


2

це так просто, як

pkill -9 ruby

нічого більше нічого менш


1

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

rails s -p 3001

або він запускається і зупиняється; у такому випадку ви хочете видалити папку temp у структурі каталогу rails, він запустить сервер рельсів.


1

перевірте /tmp/tmp/server.pid

всередині є прищик.

Зазвичай я погано "вбиваю -9 THE_PID" в cmd


У мене немає цього шляху, де він міг бути на машині ubuntu?
epsilones

це приховано ... перейдіть у папку програми, ctrl + H, щоб показати приховані файли, тоді ви зможете побачити це
Nich,

1

Я помітив у Windows (я використовую 10, але не впевнений, чи те ж саме для Олера). Якщо ви використовуєте cmd.exe і ctrl + c, сервер рейл зупиняється правильно.

Однак якщо ви використовуєте Git Bash, це не так. Він говорить, що має, але коли ви дивитесь на pmp-pids, його все ще немає.

Може, помилка з git bash?


1

killall -9 rubyзнищить усі рубінові процеси, і, принаймні, на моїй машині сервери рейликів виглядають як рубінові процеси. killall -9 railsнабагато більш специфічний і не працює для старих версій серверів рейлів (він дає "рейли: жодного процесу не знайдено", оскільки процес названий ruby)

Зустрів цю проблему деякий час тому. Після подання форми у activeadmin сервер рейлів просто повісився, і я не зміг її вбити звичайними засобами (навіть після ctrl + z вона все ще працює у фоновому режимі). Відповідь учня допомогла, але для цієї команди не потрібен ідентифікатор процесу.


0

Це питання вже пізно. Ось мої 2 копійки. Я зробив завдання граблі для зупинки сервера, коли у мене немає доступу до нього. Я проте протестував лише на Mac.

За допомогою цього ви можете просто додати його до свого проекту, а потім виконати команду rake.

Ось вам:

Посилання посилання: -на остання версія буде тут. https://gist.github.com/houmanka/289184ca5d8d92de0499#file-server-rake

Деякі коди тут:

# Make a file under: `project_root/lib/tasks/server.rake`

# Then paste the following code

    namespace :server do
      desc "Stop the running server by killing the PID"
      task :kill do
        STDOUT.puts "Enter port number: "
        post_number = STDIN.gets.strip
        system "pid=$(lsof -i:#{post_number.to_i} -t); kill -TERM $pid || kill -KILL $pid"
      end
    end

# Then to use it in the terminal: `rake server:kill`

0

Також переконайтеся, що ви виконуєте команду Cntrl + C в тому ж терміналі (вкладці), який використовується для запуску сервера.

У моєму випадку у мене було 2 вкладки, але я забув зупинити сервер від правильної вкладки, і мені було цікаво, чому Cntrl + C не працює.


0

Один супер простий спосіб був би

gem install shutup

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

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

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

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

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

rvm @global do gem install shutup


0

Ми можемо вбити сеанс рейок на Linux за допомогою PORT no

fuser -k 3000/tcp 

тут 3000 - порт № Тепер перезапустіть ваш сервер, ви побачите, що ваш сервер знаходиться в запущеному стані.


0

Виконайте такі дії:

  1. відкрити свій проект
  2. виберіть у папці tmp
  3. виберіть папку pids
  4. видалити файл server.pid
  5. тепер запустіть ваш сервер рейлів

Не працював на моїй програмі рейки 5.2. Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
a.barbieri

0
  1. Просто відкрийте файл, використовуючи вказане місце sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid

  2. знайти process_id / thread_id, на якому процес запущений.

  3. Вбити вказаний процес / нитку за допомогою kill -9 84699


0

На рейках 6 з використанням

ps aux | grep rails не повертав серверний процес

Мені довелося це робити

ps aux | grep puma

щоб знайти власне процес, а потім вбити його за допомогою

kill -9 {process_id}


0

Якщо ви використовуєте більш сучасну версію Rails і вона використовує Puma як веб-сервер, ви можете виконати наступну команду, щоб знайти застряглий процес Puma:

ps aux | grep puma

Це призведе до виходу, подібного до цього:

85923 100.0  0.8  2682420 131324 s004  R+    2:54pm   3:27.92 puma 3.12.0 (tcp://0.0.0.0:3010) [my-app]
92463   0.0  0.0  2458404   1976 s008  S+    3:09pm   0:00.00 grep puma

Ви хочете, щоб процес не посилався grep. У цьому випадку ідентифікатор процесу становить 85923.

Потім я можу виконати таку команду, щоб знищити цей процес:

kill -9 85923

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

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