6
votes

I am using Rails 4.2.6 and Ruby 2.3.0 and Puma 3.3.0 During the last couple days I ran some bundle update and after rails s all browsers for the same URL localhost:3000 are rendering the same blank page. This is consistent for all 6-7 applications I am playing with. However all are working in "production" when deployed to Heroku. Seems to be only a matter related to my dev env.

Don't know how to solve this. Any help will be much appreciated. Can't continue development if can't run unit tests on the code I am developing.

However all works well when I am using another port. For example when starting the app server with the command rails s -p 3001 or port 3002 I have no problems to run the apps in any browser using the URL localhost:3001 or localhost:3002.

What is wrong with my 3000 port or Puma or both?

1
Do you have any warnings running on port 3000? Are there any other apps (server instances) that might use this port?Pavel Oganesyan
No warnings, the logs are telling only code 200, success when rendering the main page. However the page comes empty on the browser. I have no other server or app running on port 3000. To be sure I restarted my Mac before anything. I check always with the command ps -ef | grep rails to see what servers I am running.L.D
OK, I used this and I found two (2) parasite processes. lsof -i tcp:3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 1014 liviu-mac 11u IPv6 0x9df9befdd9c36123 0t0 TCP localhost:hbci (LISTEN) ruby 1015 liviu-mac 11u IPv6 0x9df9befdd9c36123 0t0 TCP localhost:hbci (LISTEN) After I killed them with kill -9 PID the problem seems to be solved now.L.D
Are you using spring? If so, try to do a spring stop and then a killall ruby and see what happensGustavo Rubio
Yes I am using spring. I will try also with spring stop.L.D

1 Answers

12
votes

It may happen in locally in dev and never in "prod" i.e. Heroku due to a bug when stopping Puma. Some times some processes are not killed due to:

levi-test-01 liviu-mac $ rails s
=> Booting Puma
=> Rails 4.2.6 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[4589] Puma starting in cluster mode...
[4589] * Version 3.3.0 (ruby 2.3.0-p0), codename: Jovial Platypus
[4589] * Min threads: 5, max threads: 5
[4589] * Environment: development
[4589] * Process workers: 2
[4589] * Preloading application
[4589] * Listening on tcp://localhost:3000
[4589] Use Ctrl-C to stop
[4589] - Worker 1 (pid: 4603) booted, phase: 0
[4589] - Worker 0 (pid: 4602) booted, phase: 0
^C[4589] - Gracefully shutting down workers...
/Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/server.rb:355:in `delete': No such file or directory @ unlink_internal - /Users/liviu-mac/ror/levi-test-01/tmp/pids/server.pid (Errno::ENOENT)
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/server.rb:355:in `block in write_pid'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/cluster.rb:120:in `fork'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/cluster.rb:120:in `block in spawn_workers'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/cluster.rb:116:in `times'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/cluster.rb:116:in `spawn_workers'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/cluster.rb:418:in `run'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/puma/launcher.rb:172:in `run'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/puma-3.3.0/lib/rack/handler/puma.rb:51:in `run'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/rack-1.6.4/lib/rack/server.rb:286:in `start'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-4.2.6/lib/rails/commands/server.rb:80:in `start'
    from /Users/liviu-mac/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/railties-4.2.6/lib/rails/commands/commands_tasks.rb:80:in `block in server'

Running a command like this:

levi-test-01 liviu-mac $ lsof -i :3000

lists all remaining processes using port 3000.

A command like

levi-test-01 liviu-mac $ kill -9 PID

solves the problem.