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

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

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

21 ответ

Решение

Вы можете использовать другие порты, как показано ниже:

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

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

ps aux | grep rails

а потом

kill -9 {process_id} 

pkill -9 rails убить весь процесс рельсов

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

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

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

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

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

1. lsof -i tcp:3000

2. kill -9 1234

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

ИЛИ ЖЕ

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

ИЛИ ЖЕ

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

rails s -p 3001

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

killall ruby

ИЛИ ЖЕ

pkill -9 ruby

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

1. Просто удалите файл pid из каталога приложения rails

Rails_app -> tmp -> pids -> pid file

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

rails start


2. Для Rails 5.0 и выше вы можете использовать эту команду

rails restart

Если вы используете более современную версию 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

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

lsof -i:3000

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

Для Mac

ruby      TCP localhost:hbci (LISTEN)

Для Ubuntu

ruby      TCP *:3000 (LISTEN)

Шаг 3: Найдите PID процесса и уничтожьте его.

kill -9 PID

Ctrl-Z обычно делает свое дело.

Это так же просто, как

pkill -9 ruby

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

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

Итак, я удаляю server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pidзатем беги rails s

Использование 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

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

Tl; др: killall -9 ruby

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

Обнаружил эту проблему некоторое время назад. После отправки формы в activeadmin сервер rails просто завис, и я не смог убить его обычным способом (даже после ctrl+z он все еще работал в фоновом режиме). Ответ учащегося помог, но эта команда не нуждается в идентификаторе процесса.

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

rails s -p 3001

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

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

fuser -k 3000/tcp 

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

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

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

Обычно я плохо выполняю команду "kill -9 THE_PID" в cmd

На рельсах 6 с использованием

ps aux | grep rails не возвращал серверный процесс

Я должен был сделать

ps aux | grep puma

чтобы найти реальный процесс, а затем убить его, используя

kill -9 {process_id}

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

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

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

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

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

  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

Один супер легкий способ был бы

gem install shutup

затем перейдите в текущую папку вашего проекта rails и запустите

shutup # это убьет запущенный в данный момент Rails-процесс

Вы можете использовать команду "shutup" каждый раз, когда вы хотите

DICLAIMER: я создатель этого драгоценного камня

ПРИМЕЧАНИЕ: если вы используете rvm, установите гем глобально

rvm @global do gem install shutup

Уже поздно для этого вопроса. Вот мои 2 цента. Я сделал рейк-задачу для остановки сервера, когда у меня нет доступа к нему. Я только протестировал на Mac, хотя.

При этом вы можете просто добавить его в свой проект и запустить команду rake.

Ну вот:

Суть ссылки: - последняя версия будет здесь. https://gist.github.com/houmanka/289184ca5d8d92de0499

Некоторый код здесь:

# 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`

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

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

В моем случае у меня было 2 вкладки, но я забыл остановить правильную вкладку сервера, и мне было интересно, почему Cntrl+C не работает.

Нажмите Ctrl - C, он остановится,
если не проверит

Другие вопросы по тегам