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
single line command, that will take care of it.
kill -9 $(more C:/Rails/tmp/pids/server.pid)
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.
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)
Use rails default commands, for example:
rake tmp:clear
Works for me, and really simple. ;)
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
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.