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


80
..$ 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初学者最简单的方法是什么?



删除temp文件夹可以解决您的问题。
莎阿

Answers:


166

您可以删除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
挑剔-但我认为您的意思是OSX,而​​不是iOS。@SCraig这是在命令行中完成的。
jmknoll's

1
我删除了服务器.pid文件,但仍然有问题。尽管不理想,但是重新启动系统是一种快速解决方案。
马特

像魅力一样工作!
威廉·汉普

主席先生,我该如何预防?这是我经常发生的事情,我无聊手动删除server.pid。
Umagon

129

简短的Crisp单行命令,可以解决这个问题。

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

7
大声笑,如果您将其打开为localhost:3000,则可能要先关闭浏览器选项卡,否则可能会杀死您的浏览器
TMin

有人试图将其另存为zsh中的别名,但不起作用?
stackjlei

有时我的服务器将被关闭,但是ruby已使CPU耗尽。在这种情况下,我必须ruby通过运行topPID并运行来杀死kill -9 <PID>
daveomcd 18/09/18

17

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

1
封闭server.pid在反引号会导致shell尝试执行server.pid,是不是?
mwfearnley '16

14

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

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

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


4
您也可以简单地在每个容器开始处自动删除该文件:command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"。参考:github.com/docker/compose/issues/1393#issuecomment-99988242
leymannx

12

简单:

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

gem install shutup
shutup

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

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

rvm @global do gem install shutup

5

可以使用以下方法解决问题:

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

5

有时发生这种情况是因为您强行关闭了服务器,例如,手动关闭了OS /计算机,以使服务器没有足够的时间登录到server.pid。

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



3

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

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

kill -9 [PID]

[PID]您从server.pid文件复制的号码在哪里。

这将终止正在运行的服务器进程,您可以再次启动服务器而不会遇到任何麻烦。


3

使用以下命令杀死server.pid:

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

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

谢谢。


3

有关更多信息,请在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 / everthing)没有干净地退出,它将在主机中留下一个pid,从而导致退出错误。

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


3

首先找到PID# -Rails服务器卡在其中

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

cat ./tmp/pids/server.pid

它将返回类似 65829

然后杀死那个PID =>kill 65829


0

对于这个问题

我所做的是:

  • 删除位于下面的Pids文件夹 app/tmp/
  • 然后关闭正在运行当前应用程序的终端并关闭选项卡(在浏览器窗口中)

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

  • 然后,它打开运行我们的应用程序的新标签

0

首先将文件中的文件复制到文件中,然后将其删除:rm /your_project_path/tmp/pids/server.pid,然后再次创建它。touch /YOUR_PROJECT_PATH/tmp/pids/server.pid对我有用


0

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

ps aux | grep rails

然后

kill -9 [pid]

其他方式

lsof -wni tcp:3000

然后

kill -9 [PID]

0

解决

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

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

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

lsof -wni tcp:3000

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

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

杀死52179

杀死52180

滑轨

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


0

Windows解决方案:

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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.