ROR + A server is already running. Check …/tmp/pids/server.pid. Exiting

后端 未结 14 1862
渐次进展
渐次进展 2020-12-22 23:55

In my Rails Project, I am trying to run two different servers at different port. But it fails by giving this error at console.

C:\\Rails>rails s
=> Boo         


        
相关标签:
14条回答
  • 2020-12-23 00:31

    single line command, that will take care of it.

    kill -9 $(more C:/Rails/tmp/pids/server.pid)
    
    0 讨论(0)
  • 2020-12-23 00:36

    After googling a lot, I just delete that file and restart the server. Then again system create that file, then again I delete that file. Now Server is running fine. And System generates another copy at the same place. But it is running well.

    DELETE THAT FILE ....
    

    If you want to run two servers then it may again create trouble. So

    Both commands are checking the default PID file location (tmp/pids/server.pid), so you're seeing this error. Try running multiple servers like so:

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

    Credit: https://stackoverflow.com/a/14446920/1376448

    Thanks

    UPDATE after Connor Leech comment about Forman Gem

    Foreman can help manage multiple processes that your Rails app depends upon when running in development. It also provides an export command to move them into production.

    0 讨论(0)
  • 2020-12-23 00:37

    I deleted the file with cd'ing in to the tmp directory then removing the file

    rm server.pid
    

    Then I restarted the server and I got this error

    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)
    

    Then I could use the following command to see which process is running.

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

    And after I entered my password, I got this resoponse

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

    And then killed the process with the following command

    KILL -9 2786
    

    And then restarted the server (you will have a different number than 2786 - I left it here for demo purposes)

    0 讨论(0)
  • 2020-12-23 00:37

    Use rails default commands, for example:

    rake tmp:clear
    

    Works for me, and really simple. ;)

    0 讨论(0)
  • 2020-12-23 00:38

    You can use netstat to know which process is holding the rails webserver, then you can kill the pid and start it over again, assuming that for some weird reason the server is not responding or running in background and you don't find another way to restart it..

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

    The last column shows the PID and the process name, then you only need to do:

    kill -9 7656
    

    and rails s to get it working again...

    Hope it's useful

    0 讨论(0)
  • 2020-12-23 00:39

    Every instance of a RoR server creates a PID file. By default it is

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

    and if that file already exists it will refuse to start a new server.

    To run more than one server of the same project on the same machine you should manually specify the PID file name for each instance of the server (I recommend simply appending a hyphen and the port number) using the -P option:

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

    I'm told in some cases you may need to supply a full (rather than relative) path, but I don't know what those cases are.

    0 讨论(0)
提交回复
热议问题