简单回答
如果你的本地Rails服务器运行在3000端口,你首先要发现使用的是什么PID。
$> lsof -wni tcp:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 51195 shino 10u IPv4 0x3cd31f222cb761f 0t0 TCP 127.0.0.1:hbci (LISTEN)
ruby 51195 shino 11u IPv6 0x3cd31f215db234f 0t0 TCP [::1]:hbci (LISTEN)
重要的一栏是 "PID"。这里的相关数字是51195。在你的电脑上,它可能是另一个数字,但对于我们的例子来说,解决方案将是
kill -9 51195
用你自己的PID替换51195,就可以了。
替代方案:使用shutup gem
如果这个问题发生得太频繁,你可以安装一个专门解决这个问题的宝石:shutup 。存储库和文档可在此获得
从头开始的教程
如果你想 "从头开始 "测试这个问题,这里有一个小教程。将使用 Ruby 3 和 Rails 7。
先决条件
$> ruby -v
ruby 3.0.0p0 // you need at least version 3 here
$> bundle -v
Bundler version 2.2.11
$> npm -v
8.3.0 // you need at least version 7.1 here
$> yarn -v
1.22.10
安装新的Rails应用程序
$> mkdir kill_rails && cd kill_rails
$/kill_rails> echo "source 'https://rubygems.org'" > Gemfile
$/kill_rails> echo "gem 'rails', '7.0.0'" >> Gemfile
$/kill_rails> bundle install
$/kill_rails> bundle exec rails new . --force
$/kill_rails> bundle update
$/kill_rails> bin/rails db:create
$/kill_rails> bin/rails db:migrate
通过运行来检查一切是否正常
$/kill_rails> bin/rails server
=> Booting Puma
=> Rails 7.0.0 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.5.2 (ruby 3.0.0-p0) ("Zawgyi")
* Min threads: 5
* Max threads: 5
* Environment: development
* PID: 88968
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
题外话PID实际上在你启动服务器后出现的verbose logging中显示了一次。见上文。
服务器应该在本地运行而不出错,并且默认的Rails页面应用程序应该出现在http://localhost:3000。
现在停止你的本地服务器。
打开Gemfile并添加
gem "shutup", group: :development
然后
$/kill_rails> bundle install
检查Rails服务器是否正常运行
然后重新启动你的本地Rails应用程序
然后
$/kill_rails> bin/rails server
=> Booting Puma
=> Rails 7.0.0 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.5.2 (ruby 3.0.0-p0) ("Zawgyi")
* Min threads: 5
* Max threads: 5
* Environment: development
* PID: 89102
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
注意PID已经改变:现在的值是89102。
让你的终端窗口保持 "原样",让本地Web服务器运行。
关闭本地 Rails Web 服务器
打开另一个终端窗口。
考虑到我们刚才注意到的PID,以及本教程的第一段,我们可以输入 。
$> lsof -wni tcp:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 89102 shino 10u IPv4 0x3cd31f229b0f9df 0t0 TCP 127.0.0.1:hbci (LISTEN)
ruby 89102 shino 11u IPv6 0x3cd31f215db1d2f 0t0 TCP [::1]:hbci (LISTEN)
你可以注意到PID是89102,正如预期的那样
键入
kill -9 89102
并返回到第一个终端窗口。你应该看到像这样的东西。
Killed: 9
$/kill_rails>
最后一条指令显示,本地Rails服务器确实被杀死了。
再次杀死 Rails 服务器,使用 gem
$/kill_rails> bin/rails server
=> Booting Puma
=> Rails 7.0.0 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.5.2 (ruby 3.0.0-p0) ("Zawgyi")
* Min threads: 5
* Max threads: 5
* Environment: development
* PID: 90704
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
现在PID值是90704。
打开另一个终端窗口,并输入
$kill_rails> shutup
Killed process id: 90704
$kill_rails>
好了!刚才发生的事情已经很清楚了 :)
回到你的服务器正在运行的终端窗口。
Killed: 9
$/kill_rails>
希望和上面的结果一样。
尽情享受吧!