服务器已在运行。检查... / tmp / pids / server.pid。退出 - 铁路

时间:2014-07-08 09:00:23

标签: ruby-on-rails

..$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
A server is already running. Check /home/..name/rprojects/railsapp/tmp/pids/server.pid.
Exiting

为rails初学者解决这个问题最简单的方法是什么?

19 个答案:

答案 0 :(得分:119)

您可以删除server.pid文件。

rm /your_project_path/tmp/pids/server.pid

否则:

在OSX中尝试:

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

或在linux中:

ps -aef | grep rails

lsof -wni tcp:3000

使用

终止进程
kill -9 PID (eg,2786)

答案 1 :(得分:107)

Short and Crisp单行命令,可以处理它。

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

答案 2 :(得分:9)

如果您使用的是docker-compose,并且在docker-compose.yml中有: volumes: - .:/myapp 这意味着您将本地工作空间映射到容器&myapp文件夹。

对于卷定义,不会删除/ myapp中的任何内容。

您可以删除本地计算机中的./tmp/pids/server.pid。然后容器的/ myapp将没有此文件。

答案 3 :(得分:8)

server.pid仅包含正在运行的服务器的进程ID。

如果你这样做:

more /your_project_path/tmp/pids/server.pid

您将获得一个数字(例如6745),您可以使用命令kill来停止以前的服务器:

kill -9 6745

然后您可以使用rm命令

删除该文件
rm /your_project_path/tmp/pids/server.pid

答案 4 :(得分:8)

简单:

在发生这种情况时进入项目的根文件夹并运行:

gem install shutup
shutup

这将找到当前正在运行的进程,将其终止并清理pid文件

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

rvm @global do gem install shutup

答案 5 :(得分:5)

有时会因为您强行关闭服务器,例如手动关闭操作系统/机器,以致服务器没有足够的时间登录server.pid。

一种简单的方法是手动转到tmp/pids/(控制台中显示的目录)并删除server.pid文件。然后,当您再次启动服务器rails serverrails s时,它会创建一个新的server.pid,您可以继续开发。

答案 6 :(得分:3)

Windows 用户

的gui方式

打开ResourceMonitor(taskmanager - > Performance - > ResourceMonitor) 并杀死ruby.exe进程

enter image description here

答案 7 :(得分:3)

打开path/to/your/rails/project/tmp/pids/server.pid文件。

复制您在其中找到的号码。

运行kill -9 [PID]

[PID]是您从server.pid文件中复制的号码。

这将终止正在运行的服务器进程,您可以毫无困难地再次启动服务器。

答案 8 :(得分:3)

问题可以通过以下方式解决:

kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)

答案 9 :(得分:3)

在终端上运行以下命令(仅适用于linux)

ps aux | grep rails

然后

kill -9 [pid]

另一种方式

lsof -wni tcp:3000

然后

kill -9 [PID]

答案 10 :(得分:3)

首次查找PID#-Rails服务器卡住的位置

运行此命令以查找卡住的PID

cat ./tmp/pids/server.pid

它将返回类似65829

的内容

然后杀死该PID => kill 65829

答案 11 :(得分:2)

运行此命令-

lsof -wni tcp:3000

那么您将获得下表-

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ruby    2552 shyam   17u  IPv4  44599      0t0  TCP 127.0.0.1:3000 (LISTEN)
ruby    2552 shyam   18u  IPv6  44600      0t0  TCP [::1]:3000 (LISTEN)

运行此命令并替换上表中的PID

kill -9 PID

示例:

kill -9 2552

答案 12 :(得分:1)

有关更多信息,请在docker中运行应用程序的情况下。

在docker-compose.yml文件中,在应用程序容器本身下,您可以使用以下之一:

command: ["rm /your-app-path/tmp/pids/server.pid && bundle exec bin/rails s -p 3000 -b '0.0.0.0'"]

command: ["rm /your-app-path/tmp/pids/server.pid; foreman start"]

请注意使用;&&,如果&&找不到文件,rm将发出退出信号,从而迫使容器过早停止。使用;将继续执行。

这首先是为什么引起的?理由是,如果服务器(puma / thin / whatever)没有干净地退出,它将在主机中留下一个pid从而导致退出错误。

出于可移植性,而不是在主机系统上手动删除文件,最好检查文件是否存在于脚本文件或组合文件本身中。

答案 13 :(得分:1)

使用命令杀死server.pid:

kill -9 `cat /root/myapp/tmp/pids/server.pid`

注意:使用在控制台/终端中显示的server.pid路径。

谢谢。

答案 14 :(得分:0)

对于这个问题,

我做的是:

  • 删除位于app/tmp/
  • 下的Pids文件夹
  • 然后,关闭我们正在运行当前应用的终端并关闭标签(在浏览器窗口中)

  • 之后,再次通过进入文件夹打开终端,然后执行,rails s

  • 然后,它会打开运行我们的应用程序的新选项卡

答案 15 :(得分:0)

首先将文件中的文件复制到文件中,然后将其删除: rm /您的项目路径/tmp/pids/server.pid 然后再次创建它。 触摸/YOUR_PROJECT_PATH/tmp/pids/server.pid 对我有用。

答案 16 :(得分:0)

解决

地址已在使用中— Ruby on Rails中的bind(2)” 500错误

最近,我尝试在生产服务器上运行Rails应用程序。它不仅不起作用,而且还破坏了我的localhost:3000开发服务器。 Localhost只会加载空白页面或500错误。

为解决此问题,我使用了两个快速命令。如果这些操作没有返回结果,则可能需要在其他地方寻求解决方案,但这是一个很好的快速解决方案。

lsof -wni tcp:3000


ruby    52179 rachelchervin   50u  IPv6 0x...7aa3      0t0  TCP [::1]:hbci (LISTEN)
ruby    52179 rachelchervin   51u  IPv4 0x...c7bb      0t0  TCP 127.0.0.1:hbci (LISTEN)
ruby    52180 rachelchervin   50u  IPv6 0x...7aa3      0t0  TCP [::1]:hbci (LISTEN)
ruby    52180 rachelchervin   51u  IPv4 0x...c7bb      0t0  TCP 127.0.0.1:hbci (LISTEN)

此命令在3000端口上显示我当前正在运行的所有进程及其PID(进程ID)。由于现有的正在运行的进程无法正确关闭,所以我的新:3000服务器无法启动,因此出现500错误。

杀死52179

杀死52180

滑轨

我使用Linux kill命令来手动停止有问题的进程。如果大于4,则只需对所有PID使用kill,直到第一个命令变空。然后,尝试再次重新启动localhost:3000服务器。 这不会损坏您的计算机!它只是杀死本地主机端口上的现有ruby进程。新的服务器将重新开始这些过程。祝你好运!

答案 17 :(得分:0)

Windows解决方案:

  1. 查看\ tmp \ pids \ server.pid中的pid
  2. 以管理员身份打开cmd
  3. taskkill / F / PID [步骤1中的pid]
  4. 删除server.pid文件
  5. 重启服务器

答案 18 :(得分:0)

对于ubuntu 20,kill -9 $(ps -aef | grep rails)