Не могу остановить сервер рельсов


126

Я новичок в рельсах, и я использую машину ubuntu и среду разработки rubymine. Проблема в том, что я не могу остановить сервер rails. Я попытался остановить сервер, убив процесс rails. Но, когда я бегу pgrep -l rails, такого процесса не обнаруживает. Итак, я могу убить только рубиновые процессы, но сервер не остановится.

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


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

@Newben, ты хочешь убить весь процесс?
Ученик

@ Шри, да, я хочу убить весь процесс
эпсилонес

1
@Newben Проверьте мой обновленный ответ ниже, попробуйте и дайте мне знать
Learner

Ответы:


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

И некоторые из других ответов, которые я нашел:

Чтобы остановить сервер rails во время его работы, нажмите:

CTRL-C
CTRL-Z

Вы получите контроль над bash. Затем введите (без $):

$ fg

И это вернется в процесс, а затем завершится Rails sдолжным образом.

Это немного раздражает, но это лучше, чем убить процесс вручную. Это не так уж плохо, и это лучшее, что я мог понять.

Обновленный ответ:

Вы можете использовать, killall -9 railsчтобы убить все запущенные приложения с " rails" в имени.

killall -9 rails


Извините, lsof -wni tcp: 3000 ничего не возвращает, и у меня нет папки tmp / pids /
epsilones

Если Webrick запущен, то его PID находится в {APP_ROOT}/tmp/pids/server.pidфайле, поэтому вам не нужно его искать - пока сервер работает. Итак, если вместо этого ctrl-cвы просто запустите эту команду kill в другом терминале, она немедленно убьет сервер Webrick.
Learner

Когда я запускаю killall -9 rails, я получаю сообщение «такой процесс не найден» ??
epsilones

Кстати, папка {APP_ROOT} / tmp / pids / действительно существует, но она пуста
epsilones

1
Ни одна из этих команд ничего не сделала для меня. Однако перезагрузка машины устранила проблему.
Херб Михан,

51

вы можете использовать команду grep следующим образом:

ps aux | grep rails

а потом

kill -9 {process_id} 

на самом деле эта команда улавливает только '0:00 grep --color = auto rails', что, как я полагаю, является командой, называемой grep ...
epsilones

Спасибо, что это решение работает для сервера, который все еще работает, даже если терминал закрыт. Nice
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

Это убьет любой запущенный процесс rails. Замените rails чем-нибудь другим, чтобы убить любые другие процессы.


18

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

1. lsof -i tcp:3000

2. kill -9 1234

где 1234PID процесса: localhost: 3000 отображается на шаге 1.

ИЛИ

Удалите файл (server.pid) Rails.root/tmp/pids/и перезапустите сервер.

ИЛИ

откройте приложение в другом порту с помощью команды:

rails s -p 3001



10

Обычно я использую:

killall ruby

ИЛИ

pkill -9 ruby

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


Если вы не знаете pkill -9 или kill -9, стоит также заметить, что это может убить и другие процессы Ruby, например IDE rubymine.
Кьелл

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

даже при перезапуске иногда сервер работает. Потому что нам нужно убить temp / pid, чтобы остановить сервер,
Ученик,

Но обычно завершение работы терминала останавливает процесс 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; др: killall -9 ruby



1

Когда сервер rails не запускается, это означает, что он уже запущен, тогда вы можете начать, используя новый порт, например.

rails s -p 3001

или он запускается и останавливается в том случае, если вы хотите удалить временную папку в структуре каталогов rails, он запускает сервер rails.


1

проверьте /tmp/tmp/server.pid

внутри есть пид.

Обычно я делаю "kill -9 THE_PID" в cmd


У меня нет этого пути, где он может быть на машине с Ubuntu?
epsilones

он скрыт ... перейдите в папку вашего приложения, ctrl + H, чтобы показать ваши скрытые файлы, затем вы сможете это увидеть
Nich

1

Я заметил в Windows (я использую 10, но не уверен, что то же самое для oler). Если вы используете cmd.exe и ctrl + c, сервер raisl останавливается правильно.

Однако, если вы используете Git Bash, этого не произойдет. Он говорит, что есть, но когда вы смотрите на pids tmp, он все еще там.

Может, ошибка с git bash?


1

killall -9 rubyубьет все процессы ruby, и, по крайней мере, на моей машине серверы rails будут отображаться как процессы ruby. killall -9 railsгораздо более конкретен и не работает для старых версий серверов rails (выдает сообщение rails: no process found, потому что процесс называется ruby)

Обнаружил эту проблему некоторое время назад. После отправки формы в activeadmin сервер rails просто завис, и я не смог убить его обычными средствами (даже после 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

Мы можем убить сеанс rails в Linux, используя PORT no

fuser -k 3000/tcp 

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


0

Следуй этим шагам:

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

На моем приложении rails 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.