【问题标题】:How to get environment variables in live Heroku dyno如何在实时 Heroku dyno 中获取环境变量
【发布时间】:2021-03-14 05:41:36
【问题描述】:

有一个heroku config 命令,但这显然只是告诉我当前设置是什么。我想在测功机中确认我的应用程序在运行环境中实际看到的内容。

我试过heroku ps:exec -a <app> -d <dyno_instance> --ssh env,这有一些通用输出(如SHELLPATH 等)输出,但它没有显示我配置的任何 env vars(例如我的数据库字符串)。我也尝试过直接登录(使用bash 而不是env 命令)并四处寻找,但找不到任何东西。

【问题讨论】:

    标签: bash heroku


    【解决方案1】:

    改用heroku run env

    根据documentation: “由 Heroku Exec 创建的 SSH 会话不会将配置变量设置为环境变量(即会话中的 env 不会列出由heroku config:set 设置的配置变量)。”

    【讨论】:

      【解决方案2】:

      heroku run bashheroku ps:exec 类似,但具有可用的配置变量。

      【讨论】:

        【解决方案3】:

        在大多数情况下,接受的答案是可以的。 heroku run 将启动一个新的测功机,因此您需要检查 running 测功机的 实际 环境是不够的(假设,纯粹假设, Heroku 出现中断,无法启动新的测功机)。

        这是检查正在运行的测功机环境的一种方法:

        • 连接到测功机:heroku ps:exec --dyno <dyno name> --app <app name>

          例如:heroku ps:exec --dyno web.1 --app my-app

        • 获取您的服务器进程的 pid(如果您不知道,请检查您的 Procfile)。假设您正在使用pumaps aux | grep puma

          输出可能如下所示:

            u35949       4  2.9  0.3 673980 225384 ?       Sl   18:20   0:24 puma 3.12.6 (tcp://0.0.0.0:29326) [app]
            u35949      31  0.0  0.0  21476  2280 ?        S    18:20   0:00 bash --login -c bundle exec puma -C config/puma.rb
            u35949     126  0.1  0.3 1628536 229908 ?      Sl   18:23   0:00 puma: cluster worker 0: 4 [app]
            u35949     131  0.3  0.3 1628536 244664 ?      Sl   18:23   0:02 puma: cluster worker 1: 4 [app]
            u35949     196  0.0  0.0  14432  1044 pts/0    S+   18:34   0:00 grep puma
          

          选择第一个(在本例中为第二列中的第一个数字 4)

        • 现在,您可以获取该进程的环境。将<PID>替换为你刚刚得到的进程id,例如4

          cat /proc/<PID>/environ | tr '\0' '\n'
          HEROKU_APP_NAME=my-app
          DYNO=web.1
          PWD=/app
          RACK_ENV=production
          DATABASE_URL=postgres://...
          ...
          

          tr 便于阅读,因为/proc/&lt;pid&gt;/environ 的内容以零分隔。

        【讨论】:

          【解决方案4】:

          如果您的 Heroku 堆栈支持 Node.js,那么您可以在 Heroku 应用上运行 Node.js 进程并打印所有(而不仅仅是您配置的)环境变量。

          命令:

          1. heroku run node --app your-heroku-app-name
          2. console.log(process.env)

          【讨论】:

            猜你喜欢
            • 2020-04-11
            • 2019-11-28
            • 1970-01-01
            • 1970-01-01
            • 2018-03-25
            • 2019-07-16
            • 2020-09-29
            • 2013-05-11
            • 2015-05-07
            相关资源
            最近更新 更多