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

在我的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 

请检查更新的答案。

谷歌search了很多,我只是删除该文件,并重新启动服务器。 然后再次系统创build该文件,然后再次删除该文件。 现在服务器运行良好。 系统在同一个地方生成另一个副本。 但运行良好。

 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可以帮助pipe理您的Rails应用程序在开发中运行时所依赖的多个进程。 它还提供了一个导出命令,将它们转移到生产环境中。

你可以使用netstat来知道哪个进程持有rails web服务器,然后你可以杀死pid并重新启动它,假设出于某种奇怪的原因服务器没有响应或在后台运行,并且你没有find另一种方法重新启动它..

 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得到它再次工作…

希望它是有用的

我发现自己回到这个网页很多,findlsof -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 

然后再运行你的服务器!

我把cd'ing文件删除到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 

当我input密码后,我得到了这个答复

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

然后用下面的命令杀死进程

 KILL -9 2786 

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

第1步:删除.pid

 C:/Rails/tmp/pids/server.pid.Exiting # IN linux/unix shell $ rm -rf <path to file> 

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

第2步:列出本地主机的进程并杀死它

 # 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 
 ps aux | grep rails or bundle exec rails s -p 3001 -P tmp/pids/server2.pid 

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

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

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

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

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

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

你可以看到每个进程的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 

使用rails默认命令,例如:

 rake tmp:clear 

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

单线命令,会照顾它。

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

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

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

一个简单的方法,我发现较less的命令。 转到文件夹结构中运行服务器的path。 search文件。 在文件本身显示一个数字,这是当前正在运行的进程ID。 比方说,如果数字是“x”,那么只需在terminal中input这个命令即可

 kill -9 x 

但是,请注意,这在Ubuntu中有效。 不知道,如果它在其他操作系统也是如此。

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