如何在现场Heroku dyno中获取环境变量

时间:2018-01-05 18:28:14

标签: bash heroku

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

我尝试了heroku ps:exec -a <app> -d <dyno_instance> --ssh env这有一些通用输出(如SHELLPATH等)输出,但它没有显示任何我已配置的env变种(例如我的数据库字符串)。我也尝试过直接登录(使用bash代替env命令)并且四处寻找,但无法找到任何内容。

4 个答案:

答案 0 :(得分:4)

请尝试使用heroku run env

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

  • 连接到测功机: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/<pid>/environ 的内容是零分隔的。

答案 3 :(得分:0)

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

命令:

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