我在 Heroku 文档中看到了这一点:
Heroku Exec 创建的 SSH 会话不会将配置变量设置为环境变量(即会话中的 env 不会列出由 heroku config:set 设置的配置变量)。
我需要能够专门通过 SSH 进入我们的 sidekiq 容器并在那里运行控制台会话。为此,我需要访问 ENV 变量。我无法在一次性 bash 容器中执行此操作,因为 sidekiq 容器的配置不同,并且我需要确认值设置正确(通过控制台)。
像这样:
heroku ps:exec -a [our-app] -d [sidekiq.1] --with-env-vars
如何使用
heroku ps:exec
(或类似的命令)通过 ssh 连接到存在配置变量的现有 dyno?
没有最理想的,但有一个对我有帮助的选择。
识别命令调用
这是为了识别将包含环境变量的潜在进程。
ps auxfww
这会给你类似的结果:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
nobody 1 0.0 0.0 6092 3328 ? Ss 18:19 0:00 ps-run
u19585 4 0.5 0.6 553984 410984 ? Sl 18:19 0:19 puma 4.3.12 (tcp://0.0.0.0:36152) [app]
u19585 26 0.0 0.0 9836 2248 ? S 18:19 0:00 \_ bash --login -c bundle exec puma -p 36152 -C ./config/puma.rb
在这种情况下,
bash --login -c bundle exec puma
将是我们的ENV过程选择器。
加载 ENV 变量
然后每次通过
source
连接时运行
ps:exec
命令来调用 ENVS
source <(cat /proc/$(pgrep -f "bash --login -c bundle exec puma")/environ | strings)
source <(<DATA>)
:在调用中导出变量pgrep -f "<IDENTIFIED_COMMAND>"
:选择PIDcat /proc/<PID>/environ
:包含应用程序环境变量strings
:将“二进制”行转换为字符串行之后,您的主 ENV 变量将在控制台中可用。
最后将您的
source
调用复制到合适的位置,以便在需要时使用它。
您可以使用
heroku run bash
来代替。
它将使用设置中的环境变量创建一个新的临时测功机。