3

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}语法是错误的。

设置默认端口的正确方法是什么?

4

4 回答 4

4

更改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
于 2016-01-25T23:25:13.463 回答
2

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

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

于 2016-01-26T00:22:31.637 回答
2

我无法评论@PJSCopeland 的答案,所以我将其添加为另一个答案。Foreman 不是 Bash,但命令编写正确(最后 foremanProcess.spawn使用指定的命令执行)。这里的问题是工头在PORT内部设置变量,所以默认PORT值 3000 没有被使用,因为它已经定义了。

我认为@Kote 答案是最好的,但完成此任务的另一种方法是更改PORT​​变量名称,例如SERVER_PORT

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

然后更改默认SERVER_PORT执行:

SERVER_PORT=3100 foreman start
于 2016-01-26T11:05:59.177 回答
0

工头不是 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 建议的那样)。这是我的首选。

(我还在我的 , 中添加了./binand ,并在后者中添加了一个默认脚本,例如以相同的名称。然后我不必记住每个项目的“启动服务器”命令。)~/binPATHrails s

于 2016-01-25T23:31:10.190 回答