【问题标题】:Environment variable in app.json in Heroku not workingHeroku中app.json中的环境变量不起作用
【发布时间】:2021-03-05 03:12:41
【问题描述】:

我有一个 app.json,看起来像这样(大致):

{
  "addons": [
    "heroku-postgresql"
  ],
  "env": {
    "RAILS_MASTER_KEY": {
      "description": "Key to decrypt Rails credentials.",
      "require": true,
      "generator": "secret"
    },
    "SAFE_EMAIL_DEST": {
      "description": "Where to send emails when in safe mode.",
      "required": false
    }
  },
  "environments": {
    "test": {
      "scripts": {
        "test": "bundle exec rake spec"
      }
    },
    "staging": {
      "env": {
        "SAFE_EMAIL_DEST": "staging@example.com"
      }
    },
    "production": {
    }
  }
}

但是当我运行应用程序时,我收到错误:RuntimeError (SAFE_EMAIL_DEST needs to be defined) 意思是,未定义该环境变量。

我错过了什么?为什么不定义? Heroku 管道中处于暂存状态的应用的“暂存”环境名称是否正确?

【问题讨论】:

    标签: heroku


    【解决方案1】:

    对于app.json中的environmentskey,平台只能理解2个:

    • test:应用于 Heroku CI 创建的持续集成环境。
    • review:应用于由 Heroku Review Apps 创建的 Review Apps 环境。

    所以基本上你需要直接在env 键中设置你的"SAFE_EMAIL_DEST" 变量:

    {
      "addons": [
        "heroku-postgresql"
      ],
      "env": {
        "RAILS_MASTER_KEY": {
          "description": "Key to decrypt Rails credentials.",
          "require": true,
          "generator": "secret"
        },
        "SAFE_EMAIL_DEST": {
          "description": "Where to send emails when in safe mode.",
          "value": "staging@example.com"
        }
      },
      "environments": {
        "test": {
          "scripts": {
            "test": "bundle exec rake spec"
          },
          "env": {
            "SAFE_EMAIL_DEST": "Your SAFE_EMAIL_DEST for continuous integration environments"
          }
        }
      }
    }
    

    source

    【讨论】:

    • 我不确定你一开始的意思。我有一个包含两个应用程序、暂存和生产以及测试的管道。我不确定您所说的[your-project-name]-staging 是什么意思。
    • 您在 sn-p 中设置 SAFE_EMAIL_DEST 的方式看起来适用于管道中的所有环境,而不仅仅是暂存。
    • 是的,您只能在 app.json 中设置 env 变量的默认值,因为它仅描述 heroku 中的一个应用程序,而不是整个管道。您需要在创建管道后从 heroku 仪表板或使用 heroku-ci 手动更新变量:heroku config:set KEY=VALUE -a [app-name]
    • 我知道如何从命令行或我们的 UI 设置环境变量。你回答的第一段是什么意思,我不确定我是否理解。
    • (好吧,我的英语)整个管道同时进行;如果这样做,则无法为每个管道状态(暂存/生产)设置环境变量。
    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2018-03-25
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多