我正在尝试将 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 是否可以只为发布阶段指定环境变量?如果是这样,它是如何完成的?
答案 0 :(得分:0)
通过将 release
的 heroku.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
部分。