..$ rails s
=> Booting WEBrick
=> Rails 4.0.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
A server is already running. Check /home/..name/rprojects/railsapp/tmp/pids/server.pid.
Exiting
what is the easiest way to solve this for a rails beginner?
This question is related to
ruby-on-rails
If you are using docker-compose, and in docker-compose.yml have:
volumes:
- .:/myapp
That means you local workspace is mapped to the container's /myapp folder.
Anything in /myapp will not be deleted for the volumes define.
You can delete ./tmp/pids/server.pid
in you local machine. Then the container's /myapp will not have this file.
Kill server.pid by using command:
kill -9 `cat /root/myapp/tmp/pids/server.pid`
Note: Use your server.pid path which display in console/terminal.
Thank you.
For ubuntu 20, kill -9 $(ps -aef | grep rails)
It happens sometimes because you turn off the server by force, for example turning off the OS/machine manually so that the server does not have enough time to log to server.pid.
One easy way is to manually go to tmp/pids/
(the directory that is shown in your console.) and remove server.pid
file. Then, when you start the server again, rails server
or rails s
,it creates a new server.pid and you can continue development.
SOLVING
Address already in use — bind(2)” 500 error in Ruby on Rails
Recently I tried running a Rails app on a production server. Not only did it not work, but it broke my localhost:3000 development server as well. Localhost would only load a blank white page or a 500 error.
To solve this, I used two quick commands. If these don’t return a result, you may need to look elsewhere for a solution, but this is a good quick fix.
lsof -wni tcp:3000
ruby 52179 rachelchervin 50u IPv6 0x...7aa3 0t0 TCP [::1]:hbci (LISTEN) ruby 52179 rachelchervin 51u IPv4 0x...c7bb 0t0 TCP 127.0.0.1:hbci (LISTEN) ruby 52180 rachelchervin 50u IPv6 0x...7aa3 0t0 TCP [::1]:hbci (LISTEN) ruby 52180 rachelchervin 51u IPv4 0x...c7bb 0t0 TCP 127.0.0.1:hbci (LISTEN)
This command shows all of my currently running processes and their PIDs (process IDs) on the 3000 port. Because there are existing running processes that did not close correctly, my new :3000 server can’t start, hence the 500 error.
kill 52179
kill 52180
rails s
I used the Linux kill command to manually stop the offending processes. If you have more than 4, simply use kill on any PIDs until the first command comes back blank. Then, try restarting your localhost:3000 server again. This will not damage your computer! It simply kills existing ruby processes on your localhost port. A new server will start these processes all over again. Good luck!
Open the path/to/your/rails/project/tmp/pids/server.pid
file.
Copy the number you find therein.
Run kill -9 [PID]
Where [PID]
is the number you copied from the server.pid
file.
This will kill the running server process and you can start your server again without any trouble.
Run this command -
lsof -wni tcp:3000
_x000D_
then you will get the following table -
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 2552 shyam 17u IPv4 44599 0t0 TCP 127.0.0.1:3000 (LISTEN)
ruby 2552 shyam 18u IPv6 44600 0t0 TCP [::1]:3000 (LISTEN)
_x000D_
Run this command and replace PID from the Above table
kill -9 PID
_x000D_
example:
kill -9 2552
_x000D_
server.pid
only contains the process ID of the running server.
If you do:
more /your_project_path/tmp/pids/server.pid
you will get a number (say 6745) which you can use to stop the previous server with the command kill:
kill -9 6745
and then you can remove the file with the rm
command
rm /your_project_path/tmp/pids/server.pid
First Find PID # - where the Rails Server got stuck on
Run this to find the stuck PID
cat ./tmp/pids/server.pid
It will return something like 65829
Then KILL that PID => kill 65829
Run given below command on terminal ( for linux only )
ps aux | grep rails
and then
kill -9 [pid]
Another way
lsof -wni tcp:3000
and then
kill -9 [PID]
Issue can be solved using:
kill -9 $(more /home/..name/rprojects/railsapp/tmp/pids/server.pid)
For this problem,
What i did is:
app/tmp/
and then, close the terminal which we are running the current app and close the tab (in, browser window)
after that, again open the terminal by going inside the folder, and then do, rails s
Short and Crisp single line command, that will take care of it.
kill -9 $(lsof -i tcp:3000 -t)
For added information, under the context of running the application in docker.
In docker-compose.yml file, under the application container itself, you can use one of the following:
command: ["rm /your-app-path/tmp/pids/server.pid && bundle exec bin/rails s -p 3000 -b '0.0.0.0'"]
or
command: ["rm /your-app-path/tmp/pids/server.pid; foreman start"]
Note the use of either ;
or &&
, that &&
will send an exit signal if rm
fails to find the file, forcing your container to prematurely stop. Using ;
will continue to execute.
Why is this caused in the first place? The rationale is that if the server (puma/thin/whatever) does not cleanly exit, it will leave a pid in the host machine causing an exit error.
For portability rather than manually deleting the file on the host system, it's better to check if the file exists within scripted or compose file itself.
Simple:
go in the root folder of the project when this happens and run:
gem install shutup
shutup
This will find the process currently running, kill it and clean up the pid file
NOTE: if you are using rvm install the gem globally
rvm @global do gem install shutup
SOLUTION for Windows:
first copy the cumber inside the file then remove it: rm /your_project_path/tmp/pids/server.pid then create it again. touch /YOUR_PROJECT_PATH/tmp/pids/server.pid It worked for me.
Source: Stackoverflow.com