Phoenix 生产配置重新加载问题

Phoenix production config reloading problems

我有适用于 heroku 的 Phoenix 应用程序。我们想将其移至 DO。我们将使用 docker。 我尝试在我的本地机器上使用 docker-compose 创建 docker 图像。如果我用 MIX_ENV=dev 来做,一切都很好。如果我将 MIX_ENV 设置为 prod 我有问题。

上一个 prod.exs:

use Mix.Config

config :myapp, Myapp.Endpoint,
  http: [port: {:system, "PORT"}],
  url: [scheme: "https", host: "myapp.herokuapp.com", port: 443],
  force_ssl: [rewrite_on: [:x_forwarded_proto]],
  cache_static_manifest: "priv/static/manifest.json",
  secret_key_base: System.get_env("SECRET_KEY_BASE")

config :logger, level: System.get_env("LOG_LEVEL") || :info

config :myapp, Myapp.Repo,
  adapter: Ecto.Adapters.Postgres,
  url: System.get_env("DATABASE_URL"),
  pool_size: 20,
  ssl: true

prod.secret.exs 仅包含 DB

的凭据

现在:

prod.exs

# I changed only endpoint:
config :myapp, Myapp.Endpoint,
  http: [port: {:system, "PORT"}],
  ssl: false, # I replaced previous 3 lines with this...
  secret_key_base: System.get_env("SECRET_KEY_BASE")

问题

当我运行docker-compose up --build 它有效 returns:

web_1  | 20:29:07.073 [info] Running Myapp.Endpoint with Cowboy using http://localhost:4000

但是!当我做: $ curl $(docker-machine ip default):4000它returns没什么...

如果我在浏览器中转到 192.168.99.100:4000,它会将我重定向到 https://myapp.herokuapp.com

docker 会保存我之前的配置吗?我试图删除更新 Dockerfile 时构建的所有实验图像。它没有帮助:(

这是怎么回事?有什么建议吗?

P.S。 我的 Dockerfile

FROM trenpixster/elixir:1.2.5

COPY . /app
WORKDIR /app

RUN mix local.hex --force
RUN mix local.rebar --force
RUN mix do deps.get
RUN touch config/prod.exs

ENV PORT 4000
ENV MIX_ENV prod

RUN mix compile

EXPOSE 8080
EXPOSE 8443

ENTRYPOINT ["mix", "phoenix.server"]

我的docker-compose.yml

version: '2'
services:
  web:
    build: .
    ports:
      - "4000:4000"
    volumes:
      - .:/app
    depends_on:
      - db
  db:
    image: postgres:9.4.8

嗯,你试过了吗mix clean

好的。感谢@aaron-tinio 的回答。它部分解决了我的问题。第二部分是 ENV 变量...... System.get_env("SECRET_KEY_BASE") 在我的 ENV 中不存在,这可能会阻止 Phoenix ENV 的更改(我不确定)。但是我没有看到任何 notifications/exceptions/warnings:( 为了解决这个问题,我从我的本地控制台使用 MIX_ENV=prod mix phoenix.server(没有 docker)。在这种情况下,我看到了错误(感谢我的朋友 - @alg)。