[英]Can't stop rails server
我是 Rails 的新手,我正在使用 ubuntu 機器和 rubymine 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 server
、 rails 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 是一個端口號。 現在重新啟動您的服務器,您將看到您的服務器處於運行狀態。
按着這些次序:
只需使用給定的位置打開文件sudo vi /Users/user1/go/src/github.com/rails_app/rails_project/tmp/pids/server.pid
找到進程正在運行的 process_id / thread_id。
使用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.