如何在 Heroku 上 create/migrate Elixir Phoenix Docker 图像?
How to create/migrate Elixir Phoenix Docker image on Heroku?
我正在尝试弄清楚如何使用 Docker 在 Heroku 上 运行 Elixir Phoenix。我几乎在使用这个 Docker 文件:(https://github.com/jpiepkow/phoenix-docker/blob/master/Dockerfile)
# ---- Build Base Stage ----
FROM elixir:1.9.1-alpine AS app_builder
RUN apk add --no-cache=true \
gcc \
g++ \
git \
make \
musl-dev
RUN mix do local.hex --force, local.rebar --force
# ---- Build Deps Stage ----
FROM app_builder as deps
COPY mix.exs mix.lock ./
ARG MIX_ENV=prod
ENV MIX_ENV=$MIX_ENV
RUN mix do deps.get --only=$MIX_ENV, deps.compile
# ---- Build Release Stage ----
FROM deps as releaser
RUN echo $MIX_ENV
COPY config ./config
COPY lib ./lib
COPY priv ./priv
RUN mix release && \
cat mix.exs | grep app: | sed -e 's/ app: ://' | tr ',' ' ' | sed 's/ //g' > app_name.txt
# ---- Final Image Stage ----
FROM alpine:3.9 as app
RUN apk add --no-cache bash libstdc++ openssl
ENV CMD=start
COPY --from=releaser ./_build .
COPY --from=releaser ./app_name.txt ./app_name.txt
CMD ["sh","-c","./prod/rel/$(cat ./app_name.txt)/bin/$(cat ./app_name.txt) $CMD"]
我已经推送到 Heroku,应用程序正在 运行ning,但是当我尝试使用数据库时,它就崩溃了。日志说数据库需要迁移,这是有道理的,因为我还没有做过。但是现在我意识到当 mix
不可用并且我正在使用 Docker.
时我不确定该怎么做
有谁知道在使用 Docker 部署时如何创建和迁移 postgres heroku?
创建https://hexdocs.pm/phoenix/releases.html#ecto-migrations-and-custom-commands
中提到的lib/my_app/release.ex
bash 到 Heroku 发布容器中(这与 Rails 应用程序的行为不同):
heroku run bash --app my_app
两个选项:
1
./prod/rel/my_app/bin/my_app start_iex
然后运行
MyApp.Release.migrate
2
./prod/rel/my_app/bin/my_app eval ""MyApp.Release.migrate"
我正在尝试弄清楚如何使用 Docker 在 Heroku 上 运行 Elixir Phoenix。我几乎在使用这个 Docker 文件:(https://github.com/jpiepkow/phoenix-docker/blob/master/Dockerfile)
# ---- Build Base Stage ----
FROM elixir:1.9.1-alpine AS app_builder
RUN apk add --no-cache=true \
gcc \
g++ \
git \
make \
musl-dev
RUN mix do local.hex --force, local.rebar --force
# ---- Build Deps Stage ----
FROM app_builder as deps
COPY mix.exs mix.lock ./
ARG MIX_ENV=prod
ENV MIX_ENV=$MIX_ENV
RUN mix do deps.get --only=$MIX_ENV, deps.compile
# ---- Build Release Stage ----
FROM deps as releaser
RUN echo $MIX_ENV
COPY config ./config
COPY lib ./lib
COPY priv ./priv
RUN mix release && \
cat mix.exs | grep app: | sed -e 's/ app: ://' | tr ',' ' ' | sed 's/ //g' > app_name.txt
# ---- Final Image Stage ----
FROM alpine:3.9 as app
RUN apk add --no-cache bash libstdc++ openssl
ENV CMD=start
COPY --from=releaser ./_build .
COPY --from=releaser ./app_name.txt ./app_name.txt
CMD ["sh","-c","./prod/rel/$(cat ./app_name.txt)/bin/$(cat ./app_name.txt) $CMD"]
我已经推送到 Heroku,应用程序正在 运行ning,但是当我尝试使用数据库时,它就崩溃了。日志说数据库需要迁移,这是有道理的,因为我还没有做过。但是现在我意识到当 mix
不可用并且我正在使用 Docker.
有谁知道在使用 Docker 部署时如何创建和迁移 postgres heroku?
创建https://hexdocs.pm/phoenix/releases.html#ecto-migrations-and-custom-commands
中提到的lib/my_app/release.ex
bash 到 Heroku 发布容器中(这与 Rails 应用程序的行为不同):
heroku run bash --app my_app
两个选项:
1
./prod/rel/my_app/bin/my_app start_iex
然后运行
MyApp.Release.migrate
2
./prod/rel/my_app/bin/my_app eval ""MyApp.Release.migrate"