【问题标题】:Config variables not visible as environment variables in Heroku app配置变量在 Heroku 应用程序中作为环境变量不可见
【发布时间】:2014-08-08 14:42:05
【问题描述】:

我设置了一些自定义配置变量。我可以在我的应用程序的设置-> 配置变量中看到它们。我还可以使用 heroku config 命令查看这些值。但是当我启动我的应用程序时,环境变量不存在。我在 Clojure 中使用 (System/getenv "MY_VARIABLE_NAME") 来获取它们。

是因为我尝试在启动时检索它们吗?它们只能在以后使用吗?或者是否有一些抽搐可以通过一些技巧来摆脱?我之前在 Heroku 中使用过配置变量并且它们已经工作了,我不知道这里有什么问题......

【问题讨论】:

  • 检查 (System/getenv) 到日志或调试页面的输出可能会有所帮助,以查看是否还有其他内容。环境变量肯定应该在启动时存在,它们不会在以后注入。
  • 没有一个配置变量是通过 getenv 实现的。我把它们都打印出来了,它们都是零。
  • 我更想知道是否有任何其他 heroku 定义的环境变量通过使用不带参数的 System/getenv 来实现,因此它列出了包括 $USER 和 $PATH 在内的所有内容。
  • 好点!刚刚测试:用户和路径通过。
  • 如果你有机会部署一个读取环境的不同应用程序,听起来更像是你的 heroku 环境变量没有被设置,而不是 clojure 的问题。通过提交不同的应用程序,您可以验证这不是应用程序错误,并且绝对是 Heroku / 配置问题。

标签: heroku clojure environment-variables config


【解决方案1】:

我试图从带有 System/getenv 的配置变量中检索客户端 ID 和密钥,以通过 Google 进行 oauth 身份验证。我使用一个名为 Friend 的库来执行此操作。问题是,该库中 oauth 参数的设置是通过宏完成的。宏扩展发生在编译时。 Heroku 配置变量在编译期间不能用作环境变量(有充分的理由)。但是,它们可以通过文件系统获得,这是我解决问题的方法。所以而不是:

(System/getenv "MY_APP_GOOGLE_CLIENT_ID")

我正在使用这个:

(slurp (str (System/getenv "ENV_DIR") "/" "MY_APP_GOOGLE_CLIENT_ID"))

而且它有效!

【讨论】:

  • 它对我不起作用。我在 Heroku 收到一条带有 S3 vars 的消息“-----> Running: boot build clojure.lang.ExceptionInfo: /AWS_ACCESS_KEY (No such file or directory) data: {:file "/tmp/boot.user1360068341951090917.clj ", :line 17} java.io.FileNotFoundException: /AWS_ACCESS_KEY (没有这样的文件或目录)"
猜你喜欢
  • 2021-06-29
  • 1970-01-01
  • 2021-05-03
  • 2020-07-31
  • 2021-12-23
  • 2015-04-04
  • 2021-06-01
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多