143

我是 Rails 新手,我正在使用 ubuntu 机器和 ruby​​mine IDE。问题是我无法停止 rails 服务器。我试图通过终止 rails 进程来停止服务器。但是,当我运行时pgrep -l rails,没有找到这样的进程。所以,我只能杀死 ruby​​ 进程,但是,服务器不会停止。

我试过./script/server stop了(因为我是通过运行来启动它的./script/server start),但是没有用。谷歌搜索并找到一些stackoverflow帖子,我试图更改本地主机端口的监听端口但没有成功。有人可以帮忙吗?

4

27 回答 27

338

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

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

于 2013-02-26T11:42:53.507 回答
54

您可以通过以下方式使用 grep 命令,

ps aux | grep rails

进而

kill -9 {process_id} 
于 2013-02-26T11:48:27.240 回答
31

pkill -9 rails杀死rails的所有进程

更新的答案

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

这将杀死任何正在运行的 rails 进程。用其他东西替换“rails”以杀死任何其他进程。

于 2014-02-01T14:18:05.203 回答
22

以下是杀死服务器进程的步骤:

1. lsof -i tcp:3000

2. kill -9 1234

进程的 PID在哪里1234: localhost:3000 在步骤 1 中显示。

或者

删除文件(server.pid)Rails.root/tmp/pids/并重新启动服务器。

或者

使用命令在另一个端口打开应用程序:

rails s -p 3001

于 2017-01-11T06:48:03.850 回答
21

在我的 MAC 上killall -9 rails不起作用。但killall -9 ruby确实如此。

于 2014-09-30T17:33:06.907 回答
11

我一般使用:

killall ruby

或者

pkill -9 ruby

这将杀死所有正在运行的与 ruby​​ 相关的进程,如rails server,rails console等。

于 2016-06-01T04:39:51.420 回答
7

1. 只需从 rails app 目录中删除 pid 文件

Rails_app -> tmp -> pids -> pid file

删除文件并运行

rails start


2、Rails 5.0及以上版本可以使用该命令

rails restart

于 2017-05-31T16:35:02.550 回答
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
于 2013-02-26T11:44:12.293 回答
3

从 tmp/pids 文件夹中删除 server.pid。就我而言,错误是:服务器已经在运行。检查 /home/sbhatta/myapp/tmp/pids/server.pid。

所以,我删除 server.pid

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

于 2014-09-26T09:11:03.467 回答
3

Ctrl-Z 通常应该可以解决问题。

于 2015-07-24T06:28:13.207 回答
3

第 1 步:找出哪些项目正在消耗 3000 端口。

lsof -i:3000

第 2 步:找到名为的进程

对于 Mac

ruby      TCP localhost:hbci (LISTEN)

对于 Ubuntu

ruby      TCP *:3000 (LISTEN)

第三步:找到进程的PID并杀死它。

kill -9 PID
于 2017-09-17T03:43:02.660 回答
3

很简单

pkill -9 ruby

仅此而已

于 2018-11-04T16:22:40.967 回答
3

如果您使用的是更现代的 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

在此处输入图像描述

于 2020-04-18T22:17:19.403 回答
2

killall -9 rails像 Sri 建议的那样使用它,但它没有用。我将命令调整为killall -9 ruby,服务器立即关闭。

Tl;博士:killall -9 ruby

于 2015-10-15T22:24:51.870 回答
1

检查 /tmp/tmp/server.pid

里面有一个pid。

通常,我会在 cmd 中执行“kill -9 THE_PID”

于 2013-02-26T11:46:59.817 回答
1

当 rails 服务器没有启动时,这意味着它已经在运行,那么您可以通过使用新端口来启动,例如。

rails s -p 3001

或者它启动和停止在这种情况下你想删除rails目录结构中的临时文件夹它启动rails服务器。

于 2013-11-21T10:13:41.487 回答
1

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

但是,如果您使用 Git Bash,则不会。它说它有,但是当您查看 tmp pid 时,它仍然存在。

也许是 git bash 的错误?

于 2016-03-26T01:41:11.500 回答
1

killall -9 ruby将杀死所有 ruby​​ 进程,并且至少在我的机器上,rails 服务器显示为 ruby​​ 进程。killall -9 rails更具体,不适用于旧版本的 Rails 服务器(它给出“rails:找不到进程”,因为该进程名为 ruby​​)

前段时间遇到这个问题。在 activeadmin 中提交表单后,rails 服务器刚刚挂起,我无法使用正常方式杀死它(即使在 ctrl+z 之后它仍在后台运行)。学习者的回答有所帮助,但此命令不需要进程 ID。

于 2018-08-30T07:09:10.193 回答
0

这个问题已经晚了。这是我的 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`
于 2015-06-03T04:57:05.517 回答
0

此外,请确保您在用于启动服务器的同一终端(选项卡)中执行命令 Cntrl+C。

就我而言,我有 2 个选项卡,但我忘记从正确的选项卡停止服务器,我想知道为什么 Cntrl+C 不起作用。

于 2016-08-25T10:30:21.713 回答
0

一种超级简单的方法是

gem install shutup

然后进入 Rails 项目的当前文件夹并运行

shutup# 这将杀死当前正在运行的 Rails 进程

您可以随时使用命令“shutup”

免责声明:我是这颗宝石的创造者

注意:如果您使用的是 rvm,请全局安装 gem

rvm @global do gem install shutup
于 2016-11-16T11:59:00.050 回答
0

对于我的 Windows 10 机器,Ctrl - C+Ctrl - D有效。

于 2018-08-26T17:38:52.930 回答
0

我们可以使用 PORT no 在 Linux 上终止 rails 会话

fuser -k 3000/tcp 

这里 3000 是一个端口号。现在重新启动您的服务器,您将看到您的服务器处于运行状态。

于 2019-02-22T07:57:37.093 回答
0

跟着这些步骤:

  1. 打开你的项目
  2. 在 tmp 文件夹中选择
  3. 选择pids文件夹
  4. 删除 server.pid 文件
  5. 现在启动你的 Rails 服务器
于 2019-07-19T06:30:43.770 回答
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

于 2019-10-02T07:28:32.437 回答
0

在轨道 6 上使用

ps aux | grep rails没有返回服务器进程

我必须做

ps aux | grep puma

找到实际的进程,然后使用杀死它

kill -9 {process_id}

于 2020-01-02T12:09:29.950 回答
0


按 Ctrl - C如果不检查它将停止

于 2020-10-30T14:23:44.237 回答