2015-04-12 44 views
12

我將端口設置爲3000,我application.yml(費加羅管理ENV變量) rails s使用端口3000 但是當我運行foreman start(如推薦的Heroku)我得到以下輸出工頭/彪馬沒有使用指定的端口在開發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 

配置/ 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 

配置/ application.yml

PORT: "3000" 
  • 滑軌4.2.0
  • 工頭0.78.0
  • 紅寶石2.2.0p0
  • 彪馬2.11.1
+0

是你的問題,爲什麼你的配置不工作,如何有'工頭start'默認端口3000,或如何能夠使用'foreman'與3000端口?如果是後者,你可以通過在你的Procfile中添加'-p $ PORT'來實現內聯,所以它是:'web:bundle exec puma -p $ PORT -C config/puma.rb' 然後你可以使用: '工頭start -p 3000' – Sid

+1

後者應該解決我的問題,但前者是我的實際問題,爲什麼不是工頭使用3000端口? – Voska

+0

此外,我嘗試在內嵌中添加'-p $ PORT',但那不起作用,它仍然使用端口5000,'工頭啓動-p 3000'工作,但是如何在沒有命令行選項的情況下使其工作? – Voska

回答

9

推理在美洲獅港口解決。

將這個印在你的配置/ puma.rb

然後你就會看到,不知怎的,端口被神祕地設置爲5000,即使它是不是在你的ENV。

固定在底部。

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

打印出

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

然後將其放置在您的Procfile這一行(你不使用Heroku的一個)。我有一個叫Procfile.dev

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

而且我用這個命令運行它:

foreman start -f Procfile.dev 
2

使用.foreman文件有:

port: 3000 

或用.ENV文件:

PORT=3000 

任何一個都應該工作,那麼你可以只用foreman start

2

port ENV['PORT'] || 3000

該行說,你會嘗試使用ENV['PORT']第一,如果不存在,你會回落到使用3000作爲端口號。那麼你是否在foreman之前的任何地方定義了PORT環境變量? config/application.yml環境變量只會在rails服務器啓動後加載,所以在這裏定義端口號是沒有用的。

您可以嘗試在項目的根目錄下添加

PORT=3000.env文件。

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