无法阻止rails服务器

时间:2013-02-26 11:37:49

标签: ruby-on-rails

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

我尝试了./script/server stop(因为我是通过运行./script/server start开始的),但是,这不起作用。谷歌搜索并找到一些stackoverflow帖子,我试图改变localhost端口的监听端口,但没有成功。有人可以帮忙吗?

27 个答案:

答案 0 :(得分:258)

您可以使用以下其他端口:

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

答案 1 :(得分:47)

你可以用以下方式使用grep命令,

ps aux | grep rails

然后

kill -9 {process_id} 

答案 2 :(得分:27)

pkill -9 rails杀死所有铁路进程

更新回答

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

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

答案 3 :(得分:12)

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

答案 4 :(得分:11)

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

1. lsof -i tcp:3000

2. kill -9 1234

其中1234是进程的PID:步骤1中显示localhost:3000。

OR

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

OR

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

rails s -p 3001

答案 5 :(得分:9)

我通常使用:

pkill -9 ruby

OR

rails server

会杀死所有与rails console$i等运行的ruby相关进程。

答案 6 :(得分:4)

<强> 1。只需从rails app目录中删除pid文件

即可

didFinishLaunchingWithOptions

删除文件并运行

AppDelegate

<强> 2。对于Rails 5.0及更高版本,您可以使用此命令

Rails_app -> tmp -> pids -> pid file

答案 7 :(得分: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

答案 8 :(得分:3)

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

所以,我删除了server.pid

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

答案 9 :(得分:2)

我像斯里兰卡建议的那样使用了killall -9 rails并且没有用。我将命令调整为killall -9 ruby,服务器立即关闭。

Tl;博士:killall -9 ruby

答案 10 :(得分:2)

第1步:找到消耗3000端口的物品。

lsof -i:3000

第2步:找到名为

的流程

适用于Mac

ruby      TCP localhost:hbci (LISTEN)

对于Ubuntu

ruby      TCP *:3000 (LISTEN)

第3步:找到进程的PID并将其终止。

kill -9 PID

答案 11 :(得分:2)

Ctrl-Z通常可以做到这一点。

答案 12 :(得分:1)

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

但是,如果你使用Git Bash,它就不会。它说它有,但当你看到tmp pids时,它仍然存在。

也许是git bash的错误?

答案 13 :(得分:1)

当rails服务器没有启动时,意味着它已经在运行,那么你可以从使用新端口开始,例如。

rails s -p 3001

在此情况下启动和停止您希望删除rails目录结构中的临时文件夹它启动rails服务器。

答案 14 :(得分:1)

就像

一样简单
pkill -9 ruby

一无所有

答案 15 :(得分:0)

按Ctrl-C将会停止
如果没有检查

答案 16 :(得分:0)

在rails 6上使用

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

我不得不做

ps aux | grep puma

找到实际过程,然后使用

杀死它

kill -9 {process_id}

答案 17 :(得分: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

  4. 杀死指定的进程/线程

答案 18 :(得分:0)

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

enter image description here

答案 19 :(得分:0)

请按照以下步骤操作:

  1. 打开您的项目
  2. 在tmp文件夹中选择
  3. 选择pids文件夹
  4. 删除server.pid文件
  5. 现在启动您的Rails服务器

答案 20 :(得分:0)

我们可以使用PORT no终止Linux上的Rails会话

fuser -k 3000/tcp 

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

答案 21 :(得分:0)

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

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

答案 22 :(得分:0)

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

答案 23 :(得分:0)

一个超级简单的方法是

gem install shutup

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

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

你可以使用命令&#39; shutup&#39;每次你想要

DICLAIMER:我是这个宝石的创造者

注意:如果您使用rvm全局安装gem

rvm @global do gem install shutup

答案 24 :(得分:0)

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

在我的情况下,我有两个选项卡,但我忘了从正确的选项卡停止服务器,我想知道为什么Cntrl + C不工作。

答案 25 :(得分:0)

这个问题迟到了。 这是我的2美分。当我无法访问服务器时,我做了一个rake任务来停止服务器。 我只在Mac上测试过。

使用此功能,您只需将其添加到项目中,然后运行rake命令。

你走了:

Gist链接:-latest版本将在这里。 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`

答案 26 :(得分:0)

检查/tmp/tmp/server.pid

里面有一个pid。

通常情况下,我会在cmd中“杀死-9 THE_PID”