仅在发布阶段指定环境变量

时间:2021-06-22 00:28:29

标签: docker heroku

我正在尝试将 Heroku's "container" stack 用于 Review Apps,但我无法指定仅影响发布阶段的环境变量(或 Heroku 中的 config var)。

我的第一次尝试是在我的 release.config 文件中的 heroku.yml 键下指定环境变量:

build:
  docker:
    web: Dockerfile.web
    worker: Dockerfile.worker
release:
  image: web
  command:
    - mix ecto.migrate
  config:
    POOL_SIZE: 2
run:
  web:
    command:
      - mix phx.server
  worker:
    command:
      - mix worker

然而,这导致了 Heroku 的以下构建错误:

release.config in body is a forbidden property

我随后的方法是将我的 Dockerfile.web 复制到 Dockerfile.release,使用 Dockerfile.release 指定 ENV POOL_SIZE=2 内的环境变量,并相应地更新我的 heroku.yml:< /p>

build:
  docker:
    web: Dockerfile.web
    worker: Dockerfile.worker
    release: Dockerfile.release
release:
  command:
    - mix ecto.migrate
run:
  web:
    command:
      - mix phx.server
  worker:
    command:
      - mix worker

这导致了一个对我来说意义不大的错误:

Warning: You have declared both a release process type and a release section. Your release process type will be overridden.=!= Couldn't find the release image configured for this app. Is there a matching run process?

Heroku 是否可以只为发布阶段指定环境变量?如果是这样,它是如何完成的?

1 个答案:

答案 0 :(得分:0)

通过将 releaseheroku.yml 部分修改为以下内容,我最终实现了我想要的:

release:
  command:
    - /usr/bin/env POOL_SIZE=2 mix ecto.migrate

我相信如果我的 Dockerfile 中的 ENTRYPOINT/usr/bin/env,那部分可能会被省略。

回到单独的 Dockerfile 方法(我最终不得不切换到一个无关的原因),修复方法是将 CMD 中的 Dockerfile.release 更改为 mix ecto.migrate 并删除release 文件的 heroku.yml 部分。