..$ 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初学者解决这个问题最简单的方法是什么?
答案 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 server
或rails s
时,它会创建一个新的server.pid,您可以继续开发。
答案 6 :(得分:3)
Windows 用户
的gui方式打开ResourceMonitor(taskmanager - > Performance - > ResourceMonitor) 并杀死ruby.exe进程
答案 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/
然后,关闭我们正在运行当前应用的终端并关闭标签(在浏览器窗口中)
之后,再次通过进入文件夹打开终端,然后执行,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解决方案:
答案 18 :(得分:0)
对于ubuntu 20,kill -9 $(ps -aef | grep rails)