【问题标题】:GOOGLE_APPLICATION_CREDENTIALS not found?未找到 GOOGLE_APPLICATION_CREDENTIALS?
【发布时间】:2020-04-04 19:53:49
【问题描述】:

我已将我的 GOOGLE_APPLICATION_CREDENTIALS 设置为 ~/mailcreds.json,就像这样

export GOOGLE_APPLICATION_CREDENTIALS="~/mailcreds.json"

但是,每当我运行需要请求他们的 DialogFlow 项目时,我都会得到这个

{
"timestamp": "2020-04-04T19:50:12.350+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Error reading credential file from environment variable GOOGLE_APPLICATION_CREDENTIALS, value '~/mailcreds.json': File does not exist."}

我对此感到困惑!该文件在我的主目录中!

【问题讨论】:

    标签: google-cloud-platform dialogflow-es gcloud google-iam google-cloud-iam


    【解决方案1】:

    当您执行cat ~/mailcreds.json 之类的操作时,波浪号~ 由shell 处理并转换为环境变量$HOME 中的值。然而,并非所有运行时环境都能正确处理此问题。

    最好的办法是将其更改为类似

    export GOOGLE_APPLICATION_CREDENTIALS="$HOME/mailcreds.json"
    

    这是可行的,因为 shell 会立即解释 $HOME,因此 GOOGLE_APPLICATION_CREDENTIALS 将被设置为文件的完整路径。

    然而,更好的是直接设置文件的完整路径。

    确保您也在使用允许访问该文件的帐户运行您的项目。如果您以自己的身份运行项目(因为您正在开发/测试它),那么您目前应该没问题,但这对于生产中的某些东西来说是不好的做法。

    【讨论】:

    • 这个环境变量应该设置为完整的路径名,并且不依赖于环境变量,原因与您不想使用~/mailcreds.json 的原因相同。此外,凭据不应相对于主目录存储,因为服务可能无权访问 $HOME 下的文件,并且 $HOME 将为每个用户/服务提供不同的路径。
    • 我已经更新了答案以澄清一点,但在这种情况下,使用 $HOME 不会有同样的问题,因为 shell 会在调用导出时评估它,不像 ~。您的其他观点对于生产服务当然是有效的,但是在开发时,这样做可能仍然有用。
    • $HOME 是一个用户环境变量。指定路径时不要使用它。
    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 2019-03-07
    • 2018-07-13
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2021-02-10
    • 2019-11-29
    相关资源
    最近更新 更多