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文件中的数字更改为另一个并保存。