Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Foreman/Puma isn't using the specified port in dev env

I set the port as 3000 in my application.yml (figaro managing env variables) rails s uses port 3000 but when I run foreman start (as recommended by Heroku) I get the following output

14:53:23 web.1  | started with pid 24425
14:53:23 web.1  | [24425] Puma starting in cluster mode...
14:53:23 web.1  | [24425] * Version 2.11.1 (ruby 2.2.0-p0), codename: Intrepid Squirrel
14:53:23 web.1  | [24425] * Min threads: 5, max threads: 5
14:53:23 web.1  | [24425] * Environment: development
14:53:23 web.1  | [24425] * Process workers: 2
14:53:23 web.1  | [24425] * Preloading application
14:53:24 web.1  | WARNING: Skipping key "PORT". Already set in ENV.
14:53:25 web.1  | [24425] * Listening on tcp://0.0.0.0:5000
14:53:25 web.1  | [24425] Use Ctrl-C to stop
14:53:25 web.1  | [24425] - Worker 0 (pid: 24426) booted, phase: 0
14:53:25 web.1  | [24425] - Worker 1 (pid: 24427) booted, phase: 0

Procfile

web: bundle exec puma -C config/puma.rb

config/puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  ActiveRecord::Base.establish_connection
end

config/application.yml

PORT: "3000"
  • Rails 4.2.0
  • Foreman 0.78.0
  • Ruby 2.2.0p0
  • Puma 2.11.1
like image 705
Voska Avatar asked Apr 12 '15 21:04

Voska


3 Answers

Mystery on the puma port solved.

Put this print in your config/puma.rb

Then you'll see that somehow the port is mysteriously set to 5000 even though it is not in your ENV.

Fix at bottom.

puma_port = ENV['PORT'] || 3000
puts "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
puts "puma_port is #{puma_port}"
puts "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ”

That prints out

16:49:28 web.1  | ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
16:49:28 web.1  | puma_port is 5000
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

Then place this line in your Procfile (not the one you use for Heroku). I've got one called Procfile.dev

web: PORT=3000 bundle exec puma -C config/puma.rb

And I run it with this command:

foreman start -f Procfile.dev
like image 175
justingordon Avatar answered Oct 23 '22 04:10

justingordon


Use a .foreman file with:

port: 3000

or a .env file with:

PORT=3000

Either one should work, then you can just use foreman start

like image 4
BSB Avatar answered Oct 23 '22 03:10

BSB


port ENV['PORT'] || 3000

This line says that you will attempt to use ENV['PORT'] first and if that doesn't exist, you will fall back to using 3000 as the port number. So are you defining PORT environment variable anywhere prior to foreman starting? config/application.yml environment variables only will be loaded after the rails server starts, so it's no use defining port number here.

You can try adding

PORT=3000 in .env file in the root of the project directory.

Source: https://devcenter.heroku.com/articles/getting-started-with-rails5#procfile

like image 2
Jason Kim Avatar answered Oct 23 '22 05:10

Jason Kim