【问题标题】:Webrick will not stop or restartWebrick 不会停止或重启
【发布时间】:2023-07-03 23:22:01
【问题描述】:

我之前运行的是 Linux Mint 13,刚刚切换到 Fedora 17。由于我已经切换,我无法再停止 Webrick。我使用 Jetbrains Rubymine,并且启动服务器工作正常,但是一旦我点击停止或重新启动,它就会以某种方式与进程分离,并且在我重新启动计算机之前我无法再次使用该端口。我的第一个想法是 Rubymine 有问题,但是当我在控制台中启动服务器时,它会做同样的事情。我点击 ctrl-c 来停止它(它似乎这样做了),但是一旦我在该端口上再次启动服务器,它就会失败,因为重复地址正在使用中。

【问题讨论】:

  • 你运行的是什么版本的 JRuby?
  • 对不起,我是堆栈溢出的新手,并假设我收到回复时会收到一封电子邮件。我还没有看到一个,但我想我会仔细检查。 @Satish - 我在每个应用程序上使用带有几个不同补丁号的 Ruby 1.9.2。无论 ruby​​ 版本如何,我所有的应用程序都遇到了同样的问题。它似乎不像您提供的链接那样特定于应用程序。 (顺便谢谢你)

标签: ruby-on-rails ruby linux ruby-on-rails-3


【解决方案1】:

我在 Mint 上遇到此错误(如我所见,与您相反)- Ubuntu 机器总是按 CTRL+C 正常退出。无需重启机器的解决方案:杀死 Webrick 进程。通过ps aux | grep rails命令搜索分离的服务器进程的PID,然后通过kill -9 <PID>杀死它

在一行中,您可以在项目目录中运行它:

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

(您也可以将此命令设置为 .bash_profile 中的别名,以便更轻松地使用)

或者没有Webrick进程可以杀死,无论如何?

【讨论】:

  • 奇怪.. 我运行 mint 13 并决定切换到 Fedora,因为我无法忍受一些错误,但我担心这会更糟。关于您的临时修复,我之前尝试过但没有成功,但使用您的方法似乎有效。我现在可以看到所有正在运行的进程,并且能够杀死它们。不过,快速提问,你是什么意思用作别名?在运行命令之前我不必先找到 pid 吗?谢谢你的帮助。我希望有人知道问题的根源,因为这让我发疯了
  • 如果 Webrick 正在运行,那么它的 PID 就在 {APP_ROOT}/tmp/pids/server.pid 文件中,所以你不必寻找它——只要服务器正在运行。因此,如果您不执行 ctrl-c 而只是在另一个终端中运行该 kill 命令,它将立即终止 Webrick 服务器。您可以创建别名,因此您只需键入 killrailsjust as any other alias in bash,而不是长的 kill -9 ... 命令,请参阅“使别名永久化”部分。
  • 很抱歉在这方面如此密集,但它对我不起作用。我确实了解如何在 bash 配置文件中使用别名,但我不了解的部分是用于终止相关进程的通用命令。这是我的别名: alias killapp="kill -9 ./tmp/pids/server.pid" 我在应用程序根目录中运行它。它告诉我: kill: ./tmp/pids/server.pid: 参数必须是进程或作业 ID。我究竟做错了什么?再次感谢您的帮助。
  • alias killapp="cat ./tmp/pids/server.pid | xargs kill -9"
  • 非常感谢!这将有很大帮助。尽管这不是该问题的最终解决方案,但我会继续标记您的答案,因为其他人似乎没有任何想法。再次感谢。