Elixir 如何在运行时配置EXTO?

Elixir 如何在运行时配置EXTO?,elixir,ecto,Elixir,Ecto,根据,我在config/config.exs文件中有以下的EXTO配置: config :my_app, MyApp.Repo, adapter: Ecto.Adapters.Postgres, url: "postgresql://postgres@localhost/myrepo", size: 20 如果我的理解是正确的,config.exs将在编译时进行计算 有没有办法在运行时执行此配置步骤 这适用于将作为编译二进制文件分发的应用程序(通过exrm)。最终用户应该能够通过标

根据,我在
config/config.exs
文件中有以下的EXTO配置:

config :my_app, MyApp.Repo,
  adapter: Ecto.Adapters.Postgres,
  url: "postgresql://postgres@localhost/myrepo",
  size: 20
如果我的理解是正确的,
config.exs
将在编译时进行计算

有没有办法在运行时执行此配置步骤


这适用于将作为编译二进制文件分发的应用程序(通过
exrm
)。最终用户应该能够通过标志或环境变量自定义数据库url和池大小,而不是通过编辑
sys.config

可以使用
{:system,“KEY”}
从系统加载,例如:

config :my_app Repo
   url: {:system, "DATABASE_URL" },
   size: {:system, "DATABASE_POOL_SIZE" }
反而

config :my_app, Repo,
   url: "ecto://postgres:postgres@localhost/ecto_simple",
   size: 20
在本例中,您将设置EXTO以使用系统属性。当然,用户必须对其进行配置。

使用
{:system,“KEY”}
已经完成

相反,建议您在回购模块中定义一个,以设置运行时配置:

def init(_type, config) do
  config = Keyword.put(config, :url, System.get_env("DATABASE_URL"))

  {:ok, config}
end

使用运行时
init/2
函数可以从不止一个环境变量中读取配置。

值得注意的是,如果使用混合版本,有一种新方法,包括使用一个文件来配置运行时选项: