【问题标题】:ROR + A server is already running. Check .../tmp/pids/server.pid. ExitingROR + 服务器已经在运行。检查 .../tmp/pids/server.pid。退出
【发布时间】:2013-02-28 04:16:51
【问题描述】:

在我的 Rails 项目中,我试图在不同的端口上运行两台不同的服务器。但它在控制台上给出这个错误失败了。

C:\Rails>rails s
=> Booting Mongrel
=> Rails 3.1.1 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
A server is already running. Check C:/Rails/tmp/pids/server.pid.Exiting

请检查更新的答案。

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

    我发现自己经常返回此网页以查找 lsof -wni tcp:3000 命令,因此我发现此方法更简单。

    如果您收到此消息:

    A server is already running. Check /Users/username/project/tmp/pids/server.pid.
    Exiting
    

    如果您在 unix 系统(mac 或 linux)上运行,您可以运行以下命令:

    $ cat /Users/username/project/tmp/pids/server.pid
    
    # output
    
    71030
    
    # Kill the process
    
    $ kill -9 71030
    

    然后再次运行您的服务器!

    【讨论】:

      【解决方案2】:

      我删除了 cd'ing 到 tmp 目录中的文件,然后删除了文件

      rm server.pid
      

      然后我重新启动了服务器,我得到了这个错误

      Exiting/Users/josephmellin/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:206:in `bind': Address already in use - bind(2) for 0.0.0.0:3000 (Errno::EADDRINUSE)
      

      然后我可以使用以下命令查看正在运行的进程。

      sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000
      

      在我输入密码后,我得到了这个响应

      ruby      2786 josephmellin   12u  IPv4 0xfeadd8ae849eaec9      0t0  TCP *:3000 (LISTEN)
      

      然后用下面的命令杀死进程

      KILL -9 2786
      

      然后重新启动服务器(您将获得与 2786 不同的数字 - 我将其留在这里用于演示目的)

      【讨论】:

        【解决方案3】:

        在谷歌上搜索了很多之后,我只是删除了该文件并重新启动服务器。然后再次系统创建该文件,然后我再次删除该文件。现在服务器运行良好。 System 在同一个地方生成另一个副本。但它运行良好。

        DELETE THAT FILE ....
        

        如果您想运行两台服务器,那么它可能会再次造成麻烦。所以

        这两个命令都在检查默认的 PID 文件位置 (tmp/pids/server.pid),因此您会看到此错误。尝试像这样运行多个服务器:

        Server 1: bundle exec rails s
        
        Server 2: bundle exec rails s -p 3001 -P tmp/pids/server2.pid
        

        信用:https://stackoverflow.com/a/14446920/1376448

        谢谢

        更新在 Connor Leech 评论 Forman Gem 之后

        Foreman 可以帮助管理 Rails 应用所依赖的多个进程 在开发中运行时。它还提供了一个导出命令 将它们投入生产。

        【讨论】:

        • 尝试使用 forman gem 在多个端口上运行您的应用程序。使用工头,您可以使用 Procfile railscasts.com/episodes/281-foreman?view=comments 声明运行应用程序所需的各种进程
        • @ConnorLeech => 好一个 +1 。非常感谢分享。
        • 不管怎样,Foreman 似乎增加了我必须处理这个问题的次数。
        • 作者自己问,自己在 2 分钟内用谷歌搜索了很多后回答... =)
        • @MikhailMorgunov :- 首先,我尝试过。之后,我为所有开发人员发布了问题和答案。我不认为 - 这会伤害任何人。谢谢提醒,我做了有问题的更新。
        【解决方案4】:
        ps aux | grep rails
                   or 
        bundle exec rails s -p 3001 -P tmp/pids/server2.pid
        

        【讨论】:

          【解决方案5】:

          您可以使用 netstat 知道哪个进程正在持有 rails webserver,然后您可以杀死 pid 并重新启动它,假设由于某种奇怪的原因服务器没有响应或在后台运行并且您没有找到另一种重新启动它的方法..

          netstat -plntu | grep 3000
          tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      7656/ruby
          

          最后一列显示PID和进程名,那么你只需要这样做:

          kill -9 7656
          

          rails s 让它再次工作......

          希望有用

          【讨论】:

          • 在这种情况下是没有必要的,但它会显示 udp 连接和侦听端口,具体取决于其他参数..
          • 如果netstat 不适合你 (apple.stackexchange.com/questions/97212/…) 你仍然可以在你的server.pid 文件中找到你的pid 号码,只需复制它并以同样的方式杀死。
          【解决方案6】:

          第 1 步:删除 .pid

          C:/Rails/tmp/pids/server.pid.Exiting
          
          # IN linux/unix shell
          $ rm -rf <path to file>
          

          有时这并不能解决问题,那么你必须杀死本地主机运行的进程,对于这种情况,请关注STEP 2

          第 2 步:列出 localhost 的进程并杀死它

          # For Linux/Unix shell
          
          $ lsof -wni tcp:3000
          
          # output
          COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
          ruby    5946 rails   11u  IPv4  79073      0t0  TCP *:3000 (LISTEN)
          ruby    5946 rails   12u  IPv4 103786      0t0  TCP 127.0.0.1:3000->127.0.0.1:53612 (ESTABLISHED)
          
          # Kill the running process
          $ kill -9 5946
          

          再次运行你的服务器

          rails server
          

          【讨论】:

            【解决方案7】:

            每个 RoR 服务器实例都会创建一个 PID 文件。默认是

            #{Rails.root}/tmp/pids/server.pid
            

            如果该文件已经存在,它将拒绝启动新服务器。

            要在同一台机器上运行同一个项目的多个服务器,您应该使用 -P 选项手动指定服务器的每个实例的 PID 文件名(我建议简单地附加一个连字符和端口号):

            rails s -p 1234 -P tmp/pids/server-1234.pid
            

            有人告诉我,在某些情况下,您可能需要提供完整(而不是相对)路径,但我不知道这些情况是什么。

            【讨论】:

              【解决方案8】:

              你可以看到每个进程的PID(第一列):

              ps vax | grep rails
              // OR:  ps auxw | grep rails
              
              5236 pts/1    Sl+    1:46   2   0.2 /usr/bin/ruby1.9.1 script/rails s -p 3001
              5298 pts/2    Sl+    0:12   2   0.7 /usr/bin/ruby1.9.1 script/rails s -p 3003
              7356 pts/5    Sl+    0:09   2   0.9 /usr/bin/ruby1.9.1 script/rails s -p 3002
              7846 pts/3    Sl+    0:19   2   1.7 /usr/bin/ruby1.9.1 script/rails s
              

              然后杀死服务器:

              kill -9 <pid>
              

              杀死所有名称中带有“rails”的正在运行的应用程序:

              killall -9 rails
              

              【讨论】:

                【解决方案9】:

                使用rails默认命令,例如:

                rake tmp:clear
                

                对我有用,而且非常简单。 ;)

                【讨论】:

                【解决方案10】:

                单行命令,它将处理它。

                kill -9 $(more C:/Rails/tmp/pids/server.pid)
                

                【讨论】:

                  【解决方案11】:

                  我刚遇到这个问题,刚刚删除了server.pid文件,服务器工作正常!

                  【讨论】:

                    【解决方案12】:

                    删除该文件:C:/Rails/tmp/pids/server.pid

                    【讨论】:

                      【解决方案13】:

                      我发现较少命令的更简单方法。转到显示服务器正在您的文件夹结构中运行的路径。搜索文件。在文件本身上显示一个数字,它是当前正在运行的进程 ID。假设数字是“x”,那么只需在终端中输入此命令

                      kill -9 x
                      

                      但是,请注意这在 Ubuntu 中有效。不确定,它是否也适用于其他操作系统。

                      【讨论】:

                        【解决方案14】:

                        尝试将pid文件中的数字更改为另一个并保存。

                        【讨论】:

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