凤凰生产配置重装问题

时间:2016-05-18 08:31:23

标签: docker elixir docker-compose phoenix-framework docker-machine

我有一个适用于heroku的凤凰应用程序。我们想把它移到DO。我们将使用docker。 我尝试在本地机器上使用docker-compose建立docker镜像。如果我用<?xml做到这一切都很好。如果我将MIX_ENV=dev设置为MIX_ENV,我就会遇到问题。

以前的prod.exs:

prod

prod.secret.exs仅包含DB

的凭据

现在:

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

问题

当我运行# 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

但是!当我做: web_1 | 20:29:07.073 [info] Running Myapp.Endpoint with Cowboy using http://localhost:4000 它什么都不返回......

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

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

发生了什么事?有什么建议吗?

P.S。 我的Dockerfile

$ curl $(docker-machine ip default):4000

我的docker-compose.yml

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"]

2 个答案:

答案 0 :(得分:1)

嗯,你试过mix clean吗?

答案 1 :(得分:0)

确定。谢谢@ aaron-tinio的回答。这部分解决了我的问题。第二部分是ENV变量...... 我的ENV中不存在System.get_env(“SECRET_KEY_BASE”),这可能会阻止Phoenix ENV的更改(我不确定)。但我没有看到任何通知/例外/警告:( 为了解决这个问题,我在本地控制台使用 $("#addbtn").click(function(){ var cityName=document.getElementById("cityField").value.toString(); var countryName=document.getElementById("countryField").value; var description=document.getElementById("descriptionField").value; var touristTargets=document.getElementById("targetsField").value; var costPerDay=parseInt(document.getElementById("costField").value); $.ajax({ dataType: "json", type: "GET", url: "getCities.php", data: {limit:100,action:"add",cityField:cityField,countryField:countryField,descriptionField:descriptionField,targetsField:targetsField,costField:costPerDay}, success: {function(msg) { alert(msg.status); }} }); (没有docker)。在这种情况下,我看到了错误(感谢我的朋友 - @alg)。