簡體   English   中英

無法停止 Rails 服務器

[英]Can't stop rails server

我是 Rails 的新手,我正在使用 ubuntu 機器和 ruby​​mine IDE。 問題是我無法停止 Rails 服務器。 我試圖通過殺死 rails 進程來停止服務器。 但是,當我運行pgrep -l rails ,沒有找到這樣的過程。 所以,我只能殺死 ruby​​ 進程,但是,服務器不會停止。

我嘗試了./script/server stop (因為我通過運行./script/server start啟動它),但是,這不起作用。 谷歌搜索並找到一些stackoverflow帖子,我嘗試更改本地主機端口的偵聽端口但沒有成功。 有人可以幫忙嗎?

您可以使用其他端口,如下所示:

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殺死pkill -9 rails所有進程

更新答案

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

這將殺死任何正在運行的 rails 進程。 用其他東西替換“rails”以殺死任何其他進程。

以下是殺死服務器進程的步驟:

1. lsof -i tcp:3000

2. kill -9 1234

其中1234是進程的 PID: localhost:3000 顯示在步驟 1 中。

要么

刪除Rails.root/tmp/pids/下的文件(server.pid)並重新啟動服務器。

要么

使用命令在另一個端口打開應用程序:

rails s -p 3001

在我的 MAC 上, killall -9 rails不起作用。 但是killall -9 ruby可以。

我一般使用:

killall ruby

要么

pkill -9 ruby

這將殺死所有正在運行的 ruby​​ 相關進程,如rails serverrails console等。

1. 簡單地從 rails app 目錄中刪除 pid 文件

Rails_app -> tmp -> pids -> pid file

刪除文件並運行

rails start


2.對於Rails 5.0及以上,可以使用這個命令

rails restart

使用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

從 tmp/pids 文件夾中刪除 server.pid。 就我而言,錯誤是:服務器已在運行。 檢查 /home/sbhatta/myapp/tmp/pids/server.pid。

所以,我刪除了 server.pid

rm /home/sbhatta/myapp/tmp/pids/server.pid然后運行rails s

Ctrl-Z 通常應該可以解決問題。

Step 1:找出哪些物品正在消耗3000端口。

lsof -i:3000

第 2 步:找到名為的進程

對於 Mac

ruby      TCP localhost:hbci (LISTEN)

對於 Ubuntu

ruby      TCP *:3000 (LISTEN)

步驟3:找到進程的PID並殺死它。

kill -9 PID

就這么簡單

pkill -9 ruby

僅此而已

我像斯里建議的那樣使用了killall -9 rails ,但它沒有用。 我將命令調整為killall -9 ruby ,服務器立即關閉。

Tl;博士: killall -9 ruby

檢查/tmp/tmp/server.pid

里面有一個pid。

通常,我會在 cmd 中執行“kill -9 THE_PID”

當 rails 服務器沒有啟動時,這意味着它已經在運行,那么你可以使用新的端口來啟動,例如。

rails s -p 3001

或者它啟動和停止,在這種情況下,您要刪除 rails 目錄結構中的臨時文件夾,它會啟動 rails 服務器。

我在 Windows 上注意到了(我使用的是 10,但不確定 oler 是否相同)。 如果您使用 cmd.exe 和 ctrl + c,raisl 服務器將正確停止。

但是,如果您使用 Git Bash,則不會。 它說它有,但是當您查看 tmp pid 時,它仍然存在。

也許是 git bash 的錯誤?

killall -9 ruby將殺死所有 ruby​​ 進程,至少在我的機器上,rails 服務器顯示為 ruby​​ 進程。 killall -9 rails更具體,不適用於舊版本的 rails 服務器(它給出了“rails:no process found”,因為該進程名為 ruby​​)

前陣子遇到這個問題。 在 activeadmin 中提交表單后,rails 服務器剛剛掛起,我無法使用正常方式殺死它(即使在 ctrl+z 之后它仍在后台運行)。 學習者的回答有所幫助,但此命令不需要進程 ID。

如果您使用的是更現代的 Rails 版本並且它使用 Puma 作為 Web 服務器,您可以運行以下命令來查找卡住的 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 在這種情況下,進程 ID 是 85923。

然后我可以運行以下命令來終止該進程:

kill -9 85923

在此處輸入圖片說明

這個問題來晚了。 這是我的 2 美分。 當我無法訪問服務器時,我做了一個 rake 任務來停止服務器。 不過我只在 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`

另外,請確保您在用於啟動服務器的同一終端(選項卡)中執行命令 Cntrl+C。

就我而言,我有 2 個選項卡,但我忘記從正確的選項卡中停止服務器,我想知道為什么 Cntrl+C 不起作用。

一種超級簡單的方法是

gem install shutup

然后進入 Rails 項目的當前文件夾並運行

shutup # 這將殺死當前正在運行的 Rails 進程

您可以隨時使用命令“shutup”

DICLAIMER:我是這顆寶石的創造者

注意:如果您使用 rvm,請全局安裝 gem

rvm @global do gem install shutup

對於我的 Windows 10 機器, Ctrl - C + Ctrl - D有效。

我們可以使用 PORT no 在 Linux 上終止 rails 會話

fuser -k 3000/tcp 

這里 3000 是一個端口號。 現在重新啟動您的服務器,您將看到您的服務器處於運行狀態。

按着這些次序:

  1. 打開你的項目
  2. 在 tmp 文件夾中選擇
  3. 選擇pids文件夾
  4. 刪除 server.pid 文件
  5. 現在啟動你的 Rails 服務器
  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殺死指定的進程/線程

在軌道 6 上使用

ps aux | grep rails ps aux | grep rails沒有返回服務器進程

我必須做

ps aux | grep puma

找到實際的進程,然后使用殺死它

kill -9 {process_id}

按 Ctrl - C 它將停止
如果不檢查

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM