【问题标题】:How to get Heroku app name/URL from inside the app如何从应用程序内部获取 Heroku 应用程序名称/URL
【发布时间】:2012-09-16 05:46:01
【问题描述】:

我正在为http://www.dif.io 开发注册代理,以启用对部署在 Heroku 上的应用的跟踪。我缺少已部署应用程序的一些信息。注册代理是一个脚本(通常用应用程序本地语言编写),旨在在部署后执行(例如,heroku 运行或通过一些部署后挂钩自动运行)。

如何从应用程序内部获取应用程序名称、URL 和一些 UUID 标识符,最好是从一些 ENV 变量中获取?我需要它可以在不同语言之间移植。

我探索了一个示例 Python 应用程序,但上面的所有信息都丢失了。只有几个与 Python 相关的 ENV 变量。然而,测功机主机名看起来像一个 UUID。

我可以使用这样的东西,但没有用户/密码要求: https://addons.heroku.com/provider/resources/technical/reference/app-info

请指出正确的文档。

【问题讨论】:

标签: heroku


【解决方案1】:

app:info 命令似乎不再是heroku 命令,而只是info 会做同样的事情:

heroku info -s | grep web_url | cut -d= -f2

或设置变量

heroku config:set HEROKU_URL=$(heroku info -s | grep web_url | cut -d= -f2)

【讨论】:

  • 虽然这非常有用,但我发现它在控制台中不起作用。这有点奇怪,因为应用似乎应该知道一些关于自身的基本环境信息。
  • 在某个时候,Heroku 将 web_url 更改为 web-url。所以heroku info -s | grep web-url | cut -d= -f2 今天会成功。
  • 看起来你应该避免设置 HEROKU_* 命名的环境变量,因为 Heroku devcenter.heroku.com/articles/dyno-metadata 内部冲突的风险很高
  • 我认为是 heroku apps:info(带“s”)
【解决方案2】:

Dyno 元数据于 2015 年 12 月推出。它目前是实验室功能,必须先启用。

Dyno 元数据使 dyno 可以轻松访问有关应用程序和环境的信息。可用测功元元数据的示例包括有关版本、测功机大小、应用程序名称以及特定正在运行的测功机的唯一标识符的详细信息。

https://devcenter.heroku.com/articles/dyno-metadata

【讨论】:

  • 当前 dyno 元数据不包含应用主机名
  • @timelf123 到 2016 年 3 月,确实如此。 (或者至少文档中提到过,我还没有实际尝试过。)
  • 是的,应用名称被列为HEROKU_APP_NAME。但是我希望有一种方法可以从 app.json 配置中启用它。
  • 在我的实例上启用,只有 HEROKU_DYNO_ID 可用。
  • 您似乎无法将实验室功能添加到 Heroku CI 构建的应用程序中?
【解决方案3】:

2016 年 8 月推出的实验室插件将所有这些都放入您的环境中:

~ $ env
HEROKU_APP_ID:                   9daa2797-e49b-4624-932f-ec3f9688e3da
HEROKU_APP_NAME:                 example-app
HEROKU_DYNO_ID:                  1vac4117-c29f-4312-521e-ba4d8638c1ac
HEROKU_RELEASE_CREATED_AT:       2015-04-02T18:00:42Z
HEROKU_RELEASE_VERSION:          v42
HEROKU_SLUG_COMMIT:              2c3a0b24069af49b3de35b8e8c26765c1dba9ff0
HEROKU_SLUG_DESCRIPTION:         Deploy 2c3a0b2

https://devcenter.heroku.com/articles/dyno-metadata

【讨论】:

  • 在我的实例上启用,只有 HEROKU_DYNO_ID 可用。
  • @WillJones 在这里也一样。
【解决方案4】:

据我所知,Dynos 本身并没有关于它们正在运行的应用程序名称或 URL 的任何信息。 documentation on Dynos 列出了设置了哪些本地环境变量,但它只有 PORT 和 DYNO。

我们在hubot 中使用的一种解决方法是要求用户添加一个带有应用程序主机名的配置,例如 HEROKU_URL。

我发现您可以编写大部分代码,通过使用 heroku app:info 和 -s 标志以实现对 shell 的友好,并进行一些 grepping 和切割:

$ heroku apps:info -s  | grep web_url | cut -d= -f2
http://hubotio-campfire.herokuapp.com/

并从中设置 HEROKU_URL:

$ heroku config:set HEROKU_URL=$(heroku apps:info -s  | grep web_url | cut -d= -f2)

【讨论】:

【解决方案5】:

这仅适用于应用名称:

heroku info -s | grep git-url | sed 's#.\+\.com/\(.\+\)\.git$#\1#g'

我的用例是在 shell 脚本中查找应用程序名称,该脚本特别需要应用程序名称(而不是域名)。 YMMV

我使用git-url 而不是web-url,因为域名可以被自定义覆盖,但应用程序名称将始终映射到 git url。如果要查找域名,请检查其他答案之一。

【讨论】:

    【解决方案6】:

    应用名称存储在您的网址中,例如 appname.herokuapp.com。

    您可以通过多种方式获得它,例如ENV['URL'].split(".").first 在 python 中以“。”分割时获取第一个值形式的 url代表您的应用名称

    【讨论】:

      【解决方案7】:

      对于那些试图找到一种方法来获取 Heroku 中评论应用的应用 URL 的人来说,我们有两个额外的环境变量可用:

      1. HEROKU_BRANCH
      2. HEROKU_APP_NAME

      所以推断 URL 只是:“http(s)://HEROKU_APP_NAME.herokuapp.com”

      【讨论】:

      • 您能否详细说明这些环境变量是如何填充的?我的 heroku 应用程序中似乎没有这些变量?
      • 它们可能仅在 Heroku 评论应用中可用。 devcenter.heroku.com/articles/…
      猜你喜欢
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多