2015-04-12 13 views
12

ich den Port 3000 in meinem application.yml gesetzt (figaro env Variablen Verwaltung) rails s Port 3000 verwendet, aber wenn ich laufe foreman start (wie von Heroku empfohlen) ich erhalte die folgende AusgabeForeman/Puma nutzt nicht den angegeben Port in dev env

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
  • Rubin 2.2.0p0
  • Puma 2.11.1
+0

Ist Ihre Frage, warum Ihre Konfiguration nicht funktioniert, und wie hat 'Vorarbeiter Starten' standardmäßig auf Port 3000, oder wie der Lage sein,' mit Port 3000 foreman' zu benutzen? Wenn es das letztere ist, können Sie es einfach inline ausführen, indem Sie '-P P $ PORT 'zu Ihrem Procfile hinzufügen, so dass es ist: web: bundle exec puma -p $ PORT-config/puma.rb' Dann können Sie verwenden: 'Vorarbeiter Start -p 3000' – Sid

+1

Letzteres sollte mein Problem lösen, aber das erste ist meine eigentliche Frage, warum nicht Vorarbeiter Port 3000 verwenden? – Voska

+0

Ich habe auch versucht, '-p $ PORT' inline hinzuzufügen, aber das hat nicht funktioniert, es war immer noch Port 5000, 'Foreman Start -p 3000 'gearbeitet, aber wie mache ich das ohne die Befehlszeilenoption? – Voska

Antwort

9

Rätsel auf dem Pumaport gelöst.

Diesen Druck in Ihrer config/puma.rb

Dann werden Sie, dass irgendwie der Hafen sehen bis 5000 auf mysteriöse Weise eingestellt ist, obwohl es nicht in Ihrem ENV ist.

Fix unten.

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

Das druckt

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

Dann diese Zeile Platz in Ihrem procfile (nicht diejenige, die Sie für Heroku verwenden). Ich habe ein bekam genannt Procfile.dev

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

Und ich laufe es mit diesem Befehl:

foreman start -f Procfile.dev 
2

Verwenden Sie eine .foreman Datei mit:

port: 3000 

oder eine .env Datei mit:

PORT=3000 

Entweder sollte man arbeiten, dann können Sie nur foreman start

2

port ENV['PORT'] || 3000

Diese Linie verwenden sagt, dass Sie ENV['PORT'] ersten und zu verwenden versuchen, wenn das nicht vorhanden ist, wird Sie mit 3000 als Portnummer zurückgreifen. Also definieren Sie PORT Umgebungsvariable irgendwo vor foreman Start? config/application.yml Nur die Umgebungsvariablen werden geladen, nachdem der Rails-Server gestartet wurde, daher ist es nicht sinnvoll, hier die Port-Nummer zu definieren.

können Sie versuchen, in der Wurzel des Projektverzeichnis

PORT=3000 in .env-Datei hinzufügen.

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