[英]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.