Releases.exs не работает должным образом с Elixir - PullRequest
0 голосов
/ 25 апреля 2020

Моя цель - использовать одно и то же Docker изображение, которое помещается в dev по всему SDL C. После слияния кода мы хотим построить контейнер и вставить его sh в ECR. Оттуда мы внедряем в общую среду разработки, а затем отправляем sh в стадию и, в конечном итоге, в производство (все работают под управлением ECS). Я хотел бы пояснить несколько вещей.

1) При попытке создать кодовую базу для dev наше приложение не может выполнять запросы к mydb2. Ошибка, которую я получил, состояла в том, что мой пользователь не может получить доступ к таблице в mydb2. В противном случае пользовательский интерфейс загружается, потому что он может обращаться к таблицам в mydb1. В рамках моих задач ECS я экспортирую необходимые переменные через переменные среды. Вот интересная часть, если config/dev.secret.exs присутствует, все работает отлично. Я не уверен, зачем мне нужен секретный файл?

2) Вы заметили, что config/config.exs имеет несколько импортов. Я попытался удалить этот файл и только с config/dev.exs и config/releases.exs, но я столкнулся с той же проблемой выше. Что бы я ни пытался, кажется, ничего не работает без присутствия dev.secret.exs. config/releases.exs работает только для сборок "prod"?

export MIX_ENV=dev
mix release

config / releases.exs

import Config

secret_key_base = System.fetch_env!("SECRET_KEY_BASE")
db_host = System.fetch_env!("db_host")
db_password = System.fetch_env!("db_password")
aws_access_key_id = System.fetch_env!("AWS_ACCESS_KEY_ID")
aws_secret_access_key = System.fetch_env!("AWS_SECRET_ACCESS_KEY")

config :inv, Inv.Repo,
  username: "myuser",
  password: db_password,
  database: "mydb1",
  hostname: db_host,
  pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10")

config :inv, Inv.Wordpress,
  username: "myuser",
  password: db_password,
  database: "mydb2",
  hostname: db_host,
  pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10")

config :inv, Inv.Endpoint,
  server: true,
  secret_key_base: secret_key_base

config / config.exs

import_config "#{Mix.env()}.exs"
secrets_config_path = Path.join(__DIR__, "#{Mix.env()}.secret.exs")

config /dev.exs

use Mix.Config

config :inv, InvWeb.Endpoint,
  http: [port: 4002],
  url: [host: "MYURL", port: 80],
  cache_static_manifest: "priv/static/cache_manifest.json"

# Do not print debug messages in production
config :logger, level: :info
config :phoenix, :serve_endpoints, true

config / dev.secret.exs

import Config

secret_key_base =
  System.get_env("SECRET_KEY_BASE") ||
    raise """
    e1:nvironment variable SECRET_KEY_BASE is missing.
    You can generate one by calling: mix phx.gen.secret
    """

db_host =
  System.get_env("db_host") ||
    raise """
    environment variable db_host is missing.
    """

db_password =
  System.get_env("db_password") ||
    raise """
    environment variable db_password is missing.
    """

config :inv, Inv.Repo,
  username: "myuser",
  password: db_password,
  database: "mydb1",
  hostname: db_host,
  pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10")

config :inv, Inv.Wordpress,
  username: "myuser",
  password: db_password,
  database: "mydb2",
  hostname: db_host,
  pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10")
...