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

Specify environment variable only in release phase

我正在尝试使用 Heroku's "container" stack for Review Apps,但我在指定仅影响发布阶段的环境变量(或配置变量,用 Heroku 的说法)时遇到问题。

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

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 :

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 的发布阶段指定一个环境变量?如果有,是怎么做到的?

我最终通过修改 heroku.ymlrelease 部分实现了我想要的:

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

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

回到单独的 Dockerfile 方法(由于不相关的原因我最终不得不切换到它),解决方法是将 Dockerfile.release 中的 CMD 更改为 mix ecto.migrate并删除 heroku.yml 文件的 release 部分。