【问题标题】:Specifying a default port in a Procfile在 Procfile 中指定默认端口
【发布时间】:2016-05-02 10:43:22
【问题描述】:

我正在使用foreman 启动一堆服务,并在Procfile 中有以下行。

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

然而,当服务器启动时,它会在默认的 Foreman 端口 5000 上启动,因此看起来注入 3000 作为默认端口的语法是错误的。

我去寻找(其他人给了我上面的行,所以我想修复它),实际上找不到任何关于如何注入默认值的具体文档。

看着the source你看到了

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

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

【问题讨论】:

    标签: ruby-on-rails foreman procfile


    【解决方案1】:

    我无法评论@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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 也是正确的——谢谢,唉,SP 只让我认为一个答案是正确的,@simone-carletti 排在第一位。
      【解决方案3】:

      工头不是 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 suggests)。这是我的首选。

      (我在我的PATH中也加了./bin~/bin,并把rails s等默认脚本放到后者同名下。那我就不用记住“启动服务器”了" 每个项目的命令。)

      【讨论】:

        【解决方案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
        

        【讨论】:

        • 谢谢,除了 Foreman 在调用该脚本之前似乎将 PORT 设置为 5000 之外,这几乎可以正常工作,因此从未调用过 PORT=3000。我选择修改setup rake 任务以提供默认端口。
        猜你喜欢
        • 1970-01-01
        • 2016-09-06
        • 1970-01-01
        • 2022-12-16
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 1970-01-01
        • 2011-09-29
        相关资源
        最近更新 更多