Моя цель - использовать одно и то же 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")