【问题标题】:Server is already running in Rails服务器已经在 Rails 中运行
【发布时间】:2013-02-10 22:38:42
【问题描述】:

当我使用rails s 命令启动rails 服务器时,它显示A server is already running. Check C:/Sites/folder/Pids/Server.pids

当我打开文件时,它只输出一个 4 位数字,我该如何解决这个问题?

仅供参考

  1. 这次没有其他 Rails cmd 实例在运行。
  2. 检查了任务管理器,但只有cmd.exe 显示没有其他进程正在运行。 (使用 Windows)。

【问题讨论】:

  • 我从 \tmp\pids 中删除 server.pid

标签: ruby-on-rails ruby-on-rails-3.2 command-prompt webrick


【解决方案1】:

TL;DR 只需运行此命令即可杀死它

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

根本原因: 因为 PID 被锁定在一个文件中,并且 Web 服务器认为如果该文件存在则意味着它已经在运行。通常,当 Web 服务器关闭时,该文件会被删除,但在某些情况下,不会发生正确删除,因此您必须手动删除该文件 新解决方案

当你运行 rails s

=> 启动 WEBrick

=> Rails 4.0.4 应用程序在 http://0.0.0.0:3000 开始开发

=> 运行 rails server -h 以获得更多启动选项

=> Ctrl-C 关闭服务器

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

所以把你的路径放在这里 /your_project_path/tmp/pids/server.pid

并删除此 server.pid 文件:

rm /your_project_path/tmp/pids/server.pid

或如果您的服务器已分离,请遵循以下准则:

如果你使用命令“rails -d”分离了你的rails服务器,那么,

使用命令删除rails分离的服务器

ps -aef | grep rails

通过此命令或

sudo lsof -wni tcp:3000

然后

kill -9 pID

或使用此命令

通过正在运行该程序的端口名称查找并终止进程。对于 3000 替换您的程序正在运行的端口。

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

旧解决方案:

rails s -p 4000 -P tmp/pids/server2.pid

您还可以找到这篇文章以获取更多选项 Rails Update to 3.2.11 breaks running multiple servers

【讨论】:

  • 因为 PID 被锁定在文件中,并且 Web 服务器认为如果该文件存在则意味着它已经在运行。通常,当 Web 服务器关闭时,该文件会被删除,但在某些情况下不会发生正确删除,因此您必须手动删除文件
  • 小心,如果它指向 :3000,这也会杀死你的浏览器!
  • 完美解决sudo kill -9 $(lsof -i :3000 -t)
  • 非常好!我在我的 bash 配置文件上创建了一个函数,它使用这个命令杀死正在运行的服务器,所以你只需在终端上输入 kill_server 就可以了。我在我的 bash 个人资料中声明了这一点:kill_server() { sudo kill -9 $(lsof -i :3000 -t) }
【解决方案2】:

删除文件:C:/Sites/folder/Pids/Server.pids

解释 至少在 UNIX 领域,我们通常在 server.pid 之类的文件中跟踪进程 id (pid)。我认为这在这里做同样的事情。该文件可能是崩溃遗留下来的。

【讨论】:

  • 这个文件到底是做什么的以及导致这个的原因..你能解释一下吗:)
  • 对不起,我应该进一步评论。至少在 UNIX 领域,我们通常在 server.pid 之类的文件中跟踪进程 id (pid)。我认为这在这里做同样的事情。该文件可能是崩溃遗留下来的。
  • 我想我是从 Git 克隆它的,所以你认为这可能是一个原因吗? github.com/swapnesh/Add_twitter_bootstrap
  • 在这样做之后,我仍然得到一个 3000 的“正在使用的端口”。有人知道我该如何解决这个问题吗?谢谢!
  • 在命令提示符下运行 netstat -a -o 以查看哪个进程正在使用端口 3000
【解决方案3】:
lsof -wni tcp:3000

然后你应该看到 ruby​​ 进程并且你可以运行了

kill -9 processid

您现在应该可以运行该过程了

rails s thin

运行多个进程似乎不是一个好主意,而且从我读过的内容来看,很多人都同意。不幸的是,我注意到很多内存泄漏,所以我无法想象有两个进程在运行。我知道随着时间的推移,我的页面刷新速度会越来越慢,因为数据存储在内存中。

【讨论】:

    【解决方案4】:
    kill -9 $(lsof -i tcp:3000 -t)
    

    【讨论】:

    • @CalamityAdam Rails 通常在端口 3000 上运行。他根据该端口搜索进程并仅从中获取 PID(-t 选项),然后通过检索到的 PID 杀死进程。
    【解决方案5】:

    你可以通过杀死它来摆脱它:

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

    【讨论】:

    • 我喜欢这个。简洁明了,但完整。干杯。
    【解决方案6】:
    $ lsof -wni tcp:3000
    
    # Kill the running process
    $ kill -9 5946
    
    $ rm tmp/server.pids
    

    foreman start 等启动服务

    【讨论】:

      【解决方案7】:

      gem install shutup

      然后进入 Rails 项目的当前文件夹并运行

      shutup # 这将杀死当前运行的 Rails 进程

      您可以随时使用命令“shutup”

      声明:我是这颗宝石的创造者

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

      rvm @global do gem install shutup
      

      【讨论】:

        【解决方案8】:

        当你杀死你的服务器进程并且 pid 文件没有更新时会发生这种情况。 最好的解决方案是删除文件 Server.pid

        使用命令

        rm <path to file Server.pid>

        【讨论】:

          【解决方案9】:

          您可能通过以下方式暂停了服务器:^Z

          vim C:/Sites/folder/Pids/Server.pidsoutputs 的四个数字是进程ID。

          你应该kill -9 processid,用vim(或其他编辑器)输出的4个数字替换进程id。

          【讨论】:

          • 正确停止服务器的正确方法是什么? CTRL + C?
          【解决方案10】:

          在 Windows Rails 5.2 上,删除此文件

          c:/Sites/<your_folder>/tmp/pids/server.pid
          

          然后运行

          rails s
          

          再次。

          【讨论】:

            【解决方案11】:

            如果您在 Windows 上,您只需像 'rails restart' 一样执行一步,然后再次输入 'rails' 你可以走了。

            【讨论】:

              【解决方案12】:

              运行:

              在 Ubuntu/linux 中

               sudo rm /var/www/html/rails/WBPOCTEST/tmp/pids/server.pid
              

              或者

               pkill -9 ruby
              

              lsof -wni tcp:3000
              
              kill -9 pid
              

              【讨论】:

                【解决方案13】:

                运行: fuser -k -n tcp 3000

                这将杀死在默认端口 3000 上运行的进程。

                【讨论】:

                  【解决方案14】:

                  只需打开 C:/Sites/folder/Pids/Server.pids 并复制该 4 位数字 value.that 4 digit value 只不过是一个 PID,你需要杀死它 停止已经运行的进程。

                  然后停止进程使用下面的命令

                   kill -9 <pid>
                  

                  一旦已经运行的进程停止然后点击

                  rails s 启动 Rails 服务器

                  【讨论】:

                    【解决方案15】:

                    我刚遇到这个问题并尝试将其设置为不同的端口,但我唯一需要做的就是删除我的[app_directory]/tmp/pids/server.pid,一切都很好。

                    【讨论】:

                      【解决方案16】:

                      我的 docker 容器没有 lsof。试试sudo kill -9 $(netstat -ano -p tcp | grep :3000 | awk '{ print $7 }' | grep -Po '^[\d]+')

                      【讨论】:

                        【解决方案17】:

                        在 Ubuntu 上:- sudo kill -9 $(lsof -i :3000 -t)

                        在哪里, 3000 is port number

                        为我工作....

                        对于旧版本:-

                        rails s -p 3000 -P tmp/pids/server2.pid

                        【讨论】:

                          猜你喜欢
                          • 2016-07-30
                          • 2021-02-11
                          • 2014-10-31
                          • 1970-01-01
                          • 2020-01-21
                          • 2020-03-04
                          • 1970-01-01
                          • 2016-01-04
                          • 1970-01-01
                          相关资源
                          最近更新 更多