ROR + A服务器已在运行。检查... / tmp / pids / server.pid。退出

时间:2013-02-28 04:16:51

标签: ruby-on-rails-3

在我的Rails项目中,我试图在不同的端口运行两个不同的服务器。但它在控制台上出现此错误失败了。

C:\Rails>rails s
=> Booting Mongrel
=> Rails 3.1.1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
A server is already running. Check C:/Rails/tmp/pids/server.pid.Exiting

请检查更新后的答案。

14 个答案:

答案 0 :(得分:51)

经过Google搜索后,我只删除该文件并重启服务器。然后再次系统创建该文件,然后再次删除该文件。现在Server正常运行。并且系统在同一个地方生成另一个副本。但它运行良好。

DELETE THAT FILE ....

如果您想运行两台服务器,那么它可能会再次造成麻烦。所以

两个命令都检查默认的PID文件位置(tmp / pids / server.pid),因此您会看到此错误。尝试运行多个服务器,如下所示:

Server 1: bundle exec rails s

Server 2: bundle exec rails s -p 3001 -P tmp/pids/server2.pid

信用:https://stackoverflow.com/a/14446920/1376448

由于

Connor Leech对Forman Gem发表评论后

更新

  

Foreman可以帮助您管理Rails应用程序所依赖的多个进程   在开发中运行时。它还提供导出命令   将它们投入生产。

答案 1 :(得分:38)

你可以使用netstat知道哪个进程持有rails webserver,然后你可以杀死pid并重新启动它,假设由于一些奇怪的原因服务器没有响应或在后台运行而你找不到另一种重启方式..

netstat -plntu | grep 3000
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      7656/ruby

最后一列显示PID和进程名称,然后您只需要执行:

kill -9 7656

rails s让它再次运作......

希望它有用

答案 2 :(得分:15)

我发现自己回到这个网页上找到了lsof -wni tcp:3000命令,所以我发现这个方法更容易。

如果收到此消息:

A server is already running. Check /Users/username/project/tmp/pids/server.pid.
Exiting

如果你在unix系统(mac或linux)上运行,你可以运行这些命令:

$ cat /Users/username/project/tmp/pids/server.pid

# output

71030

# Kill the process

$ kill -9 71030

然后再次运行您的服务器!

答案 3 :(得分:14)

我删除了文件,cd进入tmp目录,然后删除文件

rm server.pid

然后我重新启动了服务器,我收到了这个错误

Exiting/Users/josephmellin/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:206:in `bind': Address already in use - bind(2) for 0.0.0.0:3000 (Errno::EADDRINUSE)

然后我可以使用以下命令查看正在运行的进程。

sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000

在我输入密码后,我得到了这个resoponse

ruby      2786 josephmellin   12u  IPv4 0xfeadd8ae849eaec9      0t0  TCP *:3000 (LISTEN)

然后使用以下命令杀死进程

KILL -9 2786

然后重新启动服务器(你将有一个不同于2786的数字 - 我把它留在这里用于演示目的)

答案 4 :(得分:3)

第1步:删除.pid

C:/Rails/tmp/pids/server.pid.Exiting

# IN linux/unix shell
$ rm -rf <path to file>

有时这不能解决问题,那么你必须杀死localhost运行的进程,对于这种情况,请关注STEP 2

第2步:列出localhost的进程并将其终止

# For Linux/Unix shell

$ lsof -wni tcp:3000

# output
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    5946 rails   11u  IPv4  79073      0t0  TCP *:3000 (LISTEN)
ruby    5946 rails   12u  IPv4 103786      0t0  TCP 127.0.0.1:3000->127.0.0.1:53612 (ESTABLISHED)

# Kill the running process
$ kill -9 5946

再次运行您的服务器

rails server

答案 5 :(得分:3)

ps aux | grep rails
           or 
bundle exec rails s -p 3001 -P tmp/pids/server2.pid

答案 6 :(得分:2)

RoR服务器的每个实例都会创建一个PID文件。默认情况下是

#{Rails.root}/tmp/pids/server.pid

如果该文件已经存在,它将拒绝启动新服务器。

要在同一台计算机上运行同一项目的多个服务器,您应该使用-P为每个服务器实例手动指定PID文件名(我建议只添加连字符和端口号)选项:

rails s -p 1234 -P tmp/pids/server-1234.pid

我被告知在某些情况下你可能需要提供一个完整的(而不是相对的)路径,但我不知道这些情况是什么。

答案 7 :(得分:1)

您可以看到每个流程的PID(第一列):

ps vax | grep rails
// OR:  ps auxw | grep rails

5236 pts/1    Sl+    1:46   2   0.2 /usr/bin/ruby1.9.1 script/rails s -p 3001
5298 pts/2    Sl+    0:12   2   0.7 /usr/bin/ruby1.9.1 script/rails s -p 3003
7356 pts/5    Sl+    0:09   2   0.9 /usr/bin/ruby1.9.1 script/rails s -p 3002
7846 pts/3    Sl+    0:19   2   1.7 /usr/bin/ruby1.9.1 script/rails s

然后杀死服务器:

kill -9 <pid>

使用名称中的“rails”终止所有正在运行的应用程序:

killall -9 rails

答案 8 :(得分:1)

使用rails默认命令,例如:

rake tmp:clear

适合我,而且非常简单。 ;)

答案 9 :(得分:1)

单行命令,将负责处理。

kill -9 $(more C:/Rails/tmp/pids/server.pid)

答案 10 :(得分:0)

我刚遇到这个问题,只是删除了server.pid文件和​​服务器工作正常!

答案 11 :(得分:0)

删除该文件:C:/Rails/tmp/pids/server.pid

答案 12 :(得分:0)

我找到较少命令的简单方法。转到说明服务器正在您的文件夹结构中运行的路径。搜索文件。在文件本身上显示一个数字,它是当前正在运行的进程ID。让我们说如果数字是'x',那么只需在你的终端中输入这个命令

kill -9 x

但请注意,这适用于Ubuntu。不确定,如果它也适用于其他操作系统。

答案 13 :(得分:-1)

尝试将pid文件中的数字更改为另一个并保存。