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

126

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

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

epsilones
источник
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

puneet18
источник
15

На моем MAC killall -9 railsне работает. Но killall -9 rubyделает.

user2055780
источник
Тем же. Это тоже COMMANDценность.
IIllIIll 06
10

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

killall ruby

ИЛИ

pkill -9 ruby

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

przbadu
источник
Если вы не знаете 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
Gopal S Rathore
источник
даже при перезапуске иногда сервер работает. Потому что нам нужно убить 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

Santanu
источник
3

Шаг 1: найдите, какие элементы потребляют 3000 порт.

lsof -i:3000

Шаг 2. Найдите процесс с именем

Для Mac

ruby      TCP localhost:hbci (LISTEN)

Для Ubuntu

ruby      TCP *:3000 (LISTEN)

Шаг 3: Найдите PID процесса и завершите его работу.

kill -9 PID
errakeshpd
источник
2

Я использовал, killall -9 railsкак предложил Шри, и это не сработало. Я настроил команду на, killall -9 rubyи сервер сразу закрылся.

Tl; др: killall -9 ruby

Ребекка
источник
2

это так просто, как

pkill -9 ruby

ни больше ни меньше

Elta3lab
источник
1

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

rails s -p 3001

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

Gajanan
источник
1

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

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

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

Nich
источник
У меня нет этого пути, где он может быть на машине с 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

Для моей машины с windows 10 Ctrl - C+ Ctrl - Dработает.

Эбран Хан
источник
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

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

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