6

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?

IAmInPLS
  • 4,051
  • 4
  • 24
  • 57
L.D
  • 1,279
  • 3
  • 15
  • 31
  • Do you have any warnings running on port 3000? Are there any other apps (server instances) that might use this port? – Pavel Oganesyan Apr 07 '16 at 14:29
  • 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 Apr 07 '16 at 14:37
  • 1
    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 Apr 07 '16 at 14:41
  • Are you using spring? If so, try to do a spring stop and then a killall ruby and see what happens – Gustavo Rubio Apr 07 '16 at 16:00
  • Yes I am using spring. I will try also with spring stop. – L.D Apr 07 '16 at 16:45

1 Answers1

12

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.

L.D
  • 1,279
  • 3
  • 15
  • 31