簡體   English   中英

在Procfile中指定默認端口

[英]Specifying a default port in a Procfile

我正在使用foreman來啟動一堆服務,並且Procfile中包含以下行。

web:    bundle exec rails server -p ${PORT:-3000}

但是,當服務器啟動時,它將在默認的Foreman端口5000上啟動,因此看起來像注入3000的語法,因為默認端口是錯誤的。

我一直在尋找(其他人在上面給了我一行,所以我想修復它),但實際上找不到任何有關如何注入默認值的特定文檔。

看你看到的源

def expanded_command(custom_env={})
  env = @options[:env].merge(custom_env)
  expanded_command = command.dup
  env.each do |key, val|
    expanded_command.gsub!("$#{key}", val)
  end
  expanded_command
end

因此很明顯${PORT:-3000}語法是錯誤的。

設置默認端口的正確方法是什么?

更改Procfile定義以指向自定義腳本文件:

bundle exec ./script/server

然后,創建script/server文件並配置默認值

#!/usr/bin/env bash
cd "$(dirname "$0")/.."
[ $PORT ] || PORT=3000

cmd="bundle exec rails server -p $PORT"
exec $cmd

否則,只需運行Foreman通過端口

$ foreman start -p 3000

您可以創建具有以下內容的.env文件: PORT=3000 ,然后在Procfile使用web: bundle exec rails s -p $PORT

更多信息在這里: https : //ddollar.github.io/foreman/#ENVIRONMENT

工頭不是Bash; 您不能插入這樣的表達式。

您可以這樣做:

export PORT=3000 # only once; this is persistent
foreman run

或像這樣:

PORT=3000 foreman run # $PORT is not persistent this way

您可以擴展前者,以將export命令放入一個.*rc文件(例如.rvmrc )中,該文件在切換到該目錄時會自動加載。

或者,您可以將后者另存為腳本並運行它(如Simone Carletti所建議 )。 這是我的首選。

(我還將./bin~/bin添加到我的PATH ,並使用相同的名稱將默認腳本(例如rails s放入后者中。這樣,我就不必記住每個項目的“啟動服務器”命令。 )

我無法評論@PJSCopeland的答案,因此我將其添加為另一個答案。 工頭不是Bash,但命令編寫正確(最后,工頭使用指定的命令執行Process.spawn )。 這里的問題是,領班在內部設置了變量PORT因此未使用默認PORT值3000,因為它已經定義。

我認為@Kote答案是最好的,但是完成此任務的另一種方法是將PORT變量名更改為例如SERVER_PORT

web:    bundle exec rails server -p ${SERVER_PORT:-3000}

然后更改默認的SERVER_PORT執行:

SERVER_PORT=3100 foreman start

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM