159

当我使用rails s命令启动 Rails 服务器时,它显示A server is already running. Check C:/Sites/folder/Pids/Server.pids

当我打开文件时,它只输出一个 4 位数字,那么我该如何解决这个问题?

供参考

  1. 这次没有运行 Rails cmd 的其他实例。
  2. 检查任务管理器,但只cmd.exe显示没有其他进程正在运行。(使用 Windows)。
4

17 回答 17

227

TL;DR 只需运行此命令即可杀死它

sudo kill -9 $(lsof -i :3000 -t)

根本原因: 因为 PID 被锁定在一个文件中,并且 Web 服务器认为如果该文件存在则意味着它已经在运行。通常,当 Web 服务器关闭时,该文件会被删除,但在某些情况下,不会发生正确删除,因此您必须手动删除该文件 新解决方案

当你运行rails s

=> 启动 WEBrick

=> Rails 4.0.4 应用程序开始开发http://0.0.0.0:3000

=> 运行rails server -h以获得更多启动选项

=> Ctrl-C 关闭服务器

服务器已经在运行。检查 /your_project_path/tmp/pids/server.pid。 退出

所以把你的路径放在这里 /your_project_path/tmp/pids/server.pid

并删除此server.pid文件:

rm /your_project_path/tmp/pids/server.pid

或如果您的服务器已分离,请遵循以下准则:

如果您使用命令“rails -d”分离了您的rails服务器,那么,

使用命令删除 rails detached server

ps -aef | grep rails

或通过此命令

sudo lsof -wni tcp:3000

然后

kill -9 pID

或使用此命令

通过正在运行该程序的端口名称查找并终止进程。对于 3000 替换您的程序正在运行的端口。

sudo kill -9 $(lsof -i :3000 -t)

旧解决方案:

rails s -p 4000 -P tmp/pids/server2.pid

您还可以找到这篇文章以获取更多选项 Rails Update to 3.2.11 中断运行多个服务器

于 2013-04-18T06:26:14.293 回答
217

删除文件:C:/Sites/folder/Pids/Server.pids

解释 至少在 UNIX 领域,我们通常在 server.pid 之类的文件中跟踪进程 ID (pid)。我认为这在这里做同样的事情。该文件可能是崩溃遗留下来的。

于 2013-02-25T17:34:00.127 回答
85
lsof -wni tcp:3000

然后你应该看到 ruby​​ 进程,你可以运行

kill -9 processid

你现在应该很好地运行这个过程

rails s thin

运行多个进程似乎不是一个好主意,从我读过的内容来看,很多人都同意。不幸的是,我注意到许多内存泄漏与rails,所以我无法想象有两个进程在运行。我知道随着时间的推移,我的页面刷新速度越来越慢,因为数据存储在内存中。

于 2014-03-13T18:58:22.760 回答
28
kill -9 $(lsof -i tcp:3000 -t)
于 2015-02-24T12:26:24.230 回答
13

你可以通过杀死它来摆脱它:

kill -9 $(lsof -i tcp:3000 -t)
于 2018-03-27T13:38:00.663 回答
12
$ lsof -wni tcp:3000

# Kill the running process
$ kill -9 5946

$ rm tmp/server.pids

工头启动等启动服务

于 2016-06-08T03:05:23.147 回答
6

gem install shutup

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

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

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

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

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

rvm @global do gem install shutup
于 2016-11-16T11:51:50.263 回答
5

当您终止服务器进程并且 pid 文件未更新时,就会发生这种情况。最好的解决方案是删除文件Server.pid

使用命令

rm <path to file Server.pid>

于 2013-08-28T11:19:55.770 回答
3

可能您通过以下方式暂停了服务器:^Z

输出的四个数字vim C:/Sites/folder/Pids/Server.pids是进程ID。

您应该kill -9 processid将进程 ID 替换为 vim(或其他编辑器)输出的 4 个数字。

于 2015-07-20T03:24:07.610 回答
3

在 Windows Rails 5.2 上,删除此文件

c:/Sites/<your_folder>/tmp/pids/server.pid

并运行

rails s

再次。

于 2018-09-17T23:48:41.710 回答
2

如果您在 Windows 上,您只需执行 “rails restart”一步 ,然后再次输入 “rails s” 即可。

于 2017-11-03T08:18:37.517 回答
2

跑:

在 Ubuntu/Linux 中

 sudo rm /var/www/html/rails/WBPOCTEST/tmp/pids/server.pid

或者

 pkill -9 ruby

或者

lsof -wni tcp:3000

kill -9 pid
于 2019-01-16T08:31:39.257 回答
1

跑: fuser -k -n tcp 3000

这将终止在默认端口 3000 上运行的进程。

于 2018-09-06T23:20:32.877 回答
1

只需打开那个 C:/Sites/folder/Pids/Server.pids 并复制那个 4 位数的值。那个 4 位数的值只不过是一个 PID,你需要杀死它来停止已经运行的进程。

然后停止进程使用下面的命令

 kill -9 <pid>

once that already running process get stopped then hit

rails s to start the rails server

于 2020-11-28T03:49:22.727 回答
0

我刚刚遇到这个问题并尝试将其设置为不同的端口,但我唯一需要做的就是删除我的[app_directory]/tmp/pids/server.pid,一切都很好。

于 2018-12-28T21:58:01.797 回答
0

On Ubuntu :- sudo kill -9 $(lsof -i :3000 -t)

where, 3000 is port number

Works for me....

For older versions :-

rails s -p 3000 -P tmp/pids/server2.pid

于 2021-08-10T10:12:47.557 回答
0

my docker container has no lsof. Try sudo kill -9 $(netstat -ano -p tcp | grep :3000 | awk '{ print $7 }' | grep -Po '^[\d]+')

于 2021-10-07T09:21:41.867 回答