Не могу остановить сервер рельсов
Я новичок в рельсах, и я использую машину с 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
Удалите 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}
Следуй этим шагам:
- открой свой проект
- выберите в папке tmp
- выберите папку pids
- удалить файл server.pid
- Теперь запустите ваш сервер рельсов
Я заметил на Windows (я использую 10, но не уверен, что то же самое для Oler). Если вы используете cmd.exe и ctrl + c, сервер raisl останавливается правильно.
Однако, если вы используете Git Bash, это не так. Он говорит, что имеет, но когда вы смотрите на tmp pids, он все еще там.
Может быть, ошибка с git bash?
Просто откройте файл, используя указанное местоположение
sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid
найдите process_id / thread_id, на котором запущен процесс.
Убить указанный процесс / поток, используя
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`
Также убедитесь, что вы выполняете команду Cntrl+C в том же терминале (вкладке), который используется для запуска сервера.
В моем случае у меня было 2 вкладки, но я забыл остановить правильную вкладку сервера, и мне было интересно, почему Cntrl+C не работает.